Logo Wy Online Judge

WyOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#400#59. 「NOIP2013」火柴排队ryp100164ms9308kbC++141.3kb2025-04-23 12:50:062025-04-23 12:50:07

answer


#include<cstdio>
#include<algorithm>
using namespace std;
const int mod=99999997;
long long n,x[10000005],p[1000005],ans=0;
struct fire{
    int hi,bh;
}l1[1000005],l2[1000005];
bool cmp1(fire a,fire b)
{
    return a.hi<b.hi;
}
void msort(int s,int t)//归并排序; 
{
    if(s==t)return ;
    int mid=(s+t)/2;
    msort(s,mid);msort(mid+1,t);
    int i=s,k=s,j=mid+1;
    while(i<=mid && j<=t)
    {
        if(x[i]<=x[j])
        {
            p[k]=x[i];
            ++k;++i;
            
        }
        else
        {
            p[k]=x[j];
            ++k;++j;
            ans=(ans+mid-i+1)%mod;
			//此处找到逆序对,mid-i~mid中数全都与j构成逆序,还会少算一个,+1;
        }
    }
    while(i<=mid)
    {
        p[k]=x[i];
        ++k;++i;
    }
    while(j<=t)
    {
        p[k]=x[j];
        ++k;++j;
    }
    for(int i=s;i<=t;i++)
    {
        x[i]=p[i];
    }
}
int main()
{
    scanf("%lld",&n);
    for(int i=1;i<=n;i++)
        scanf("%d",&l1[i].hi),l1[i].bh=i;
    for(int i=1;i<=n;i++)
        scanf("%d",&l2[i].hi),l2[i].bh=i;
    sort(l1+1,l1+n+1,cmp1);
    sort(l2+1,l2+n+1,cmp1);
    //排序; 
    for(int i=1;i<=n;i++)
        x[l2[i].bh]=l1[i].bh; 
    msort(1,n);
    //调用归并; 
    printf("%lld",ans);
    return 0;//这个不会有人忘的吧? 
}

详细

小提示:点击横条可展开更详细的信息

Test #1:

score: 10
Accepted
time: 0ms
memory: 5812kb

input:

10
10 1 5 2 7 4 9 3 6 8
7 5 1 8 10 4 6 2 3 9

output:

18

result:

ok 1 number(s): "18"

Test #2:

score: 10
Accepted
time: 1ms
memory: 5780kb

input:

50
41 29 19 46 13 28 47 17 45 4 34 14 37 7 30 24 27 9 11 15 50 8 39 32 3 42 10 16 31 6 1 43 21 36 2 ...

output:

540

result:

ok 1 number(s): "540"

Test #3:

score: 10
Accepted
time: 0ms
memory: 5712kb

input:

100
99 6 48 29 62 84 91 41 4 25 71 90 53 38 80 30 65 52 35 94 97 89 27 28 23 36 59 40 12 21 13 60 44...

output:

2546

result:

ok 1 number(s): "2546"

Test #4:

score: 10
Accepted
time: 4ms
memory: 5704kb

input:

500
469 1 475 414 470 87 323 138 390 500 14 86 289 374 9 130 171 70 166 407 145 250 256 238 356 380 ...

output:

60636

result:

ok 1 number(s): "60636"

Test #5:

score: 10
Accepted
time: 0ms
memory: 5708kb

input:

1000
862 417 848 334 434 61 919 162 893 972 179 144 502 83 750 457 908 150 264 45 564 771 312 84 559...

output:

259816

result:

ok 1 number(s): "259816"

Test #6:

score: 10
Accepted
time: 1ms
memory: 7968kb

input:

5000
4361 1 4216 1620 1548 146 3343 330 263 4996 4893 70 3053 833 579 4999 507 3890 547 3946 1895 40...

output:

6225256

result:

ok 1 number(s): "6225256"

Test #7:

score: 10
Accepted
time: 13ms
memory: 5920kb

input:

10000
9328 868 9128 1330 1883 2321 5754 10 9609 6604 2514 5 5178 7488 3971 9170 7605 3044 916 1426 7...

output:

24906204

result:

ok 1 number(s): "24906204"

Test #8:

score: 10
Accepted
time: 24ms
memory: 6172kb

input:

20000
18271 950 12480 16977 14282 14658 12427 4142 6276 19576 17366 17604 5713 1635 10966 12013 1459...

output:

99902736

result:

ok 1 number(s): "99902736"

Test #9:

score: 10
Accepted
time: 52ms
memory: 8436kb

input:

50000
48199 3134 33319 30418 34414 7392 29871 41472 11673 33938 34985 37354 5549 25811 13334 29512 7...

output:

23190504

result:

ok 1 number(s): "23190504"

Test #10:

score: 10
Accepted
time: 69ms
memory: 9308kb

input:

100000
82112 75046 5985 34284 96873 1220 23850 81070 16197 95848 47020 49570 57518 89281 68914 4491 ...

output:

97187296

result:

ok 1 number(s): "97187296"