ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#400 | #59. 「NOIP2013」火柴排队 | ryp | 100 | 164ms | 9308kb | C++14 | 1.3kb | 2025-04-23 12:50:06 | 2025-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"