比赛 |
20251001国庆欢乐赛1 |
评测结果 |
AAAAAAAAAA |
题目名称 |
火柴排队 |
最终得分 |
100 |
用户昵称 |
彭欣越 |
运行时间 |
0.164 s |
代码语言 |
C++ |
内存使用 |
4.20 MiB |
提交时间 |
2025-10-01 09:52:26 |
显示代码纯文本
#include <bits/stdc++.h>
using namespace std;
typedef long long lol;
const int N=1000010,mod=99999997;
int n,s[N],t[N],ans;
struct node {
int x,id;
}a[N],b[N];
bool cmp (node x,node y) {
return x.x<y.x;
}
void merge (int l,int r) {
if (l>=r) return;
int mid=(l+r)/2;
merge(l,mid);merge(mid+1,r);
int ll=l,rr=mid+1;
int cnt=l-1;
while (ll<=mid&&rr<=r) {
if (s[ll]<s[rr]) {
t[++cnt]=s[ll++];
}else{
t[++cnt]=s[rr++];
ans+=mid-ll+1;
ans%=mod;
}
}
while (ll<=mid) t[++cnt]=s[ll++];
while (rr<=r) t[++cnt]=s[rr++];
for (int i=l;i<=r;i++) s[i]=t[i];
return;
}
int main () {
freopen("MatchNOIP2013.in","r",stdin);
freopen("MatchNOIP2013.out","w",stdout);
ios::sync_with_stdio(0);
cin.tie(0),cout.tie(0);
cin >> n;
for (int i=1;i<=n;i++) {
cin >> a[i].x;
a[i].id=i;
}
for (int i=1;i<=n;i++) {
cin >> b[i].x;
b[i].id=i;
}
sort(a+1,a+n+1,cmp);
sort(b+1,b+n+1,cmp);
for (int i=1;i<=n;i++) s[a[i].id]=b[i].id;
merge(1,n);
cout << ans <<endl;
return 0;
}