比赛 |
20251001国庆欢乐赛1 |
评测结果 |
RRRRRRRRRR |
题目名称 |
火柴排队 |
最终得分 |
0 |
用户昵称 |
123 |
运行时间 |
0.029 s |
代码语言 |
C++ |
内存使用 |
3.71 MiB |
提交时间 |
2025-10-01 09:53:23 |
显示代码纯文本
#include <bits/stdc++.h>
#define fi first
#define sd second
using namespace std;
const int N=1e5+10,mod=99999997;
int n,c[N],d[N],mp[N];
long long ret=0;
struct node{
int x,id;
} a[N],b[N];
int query(int x)
{
int cnt=0;
for (int i=x;i;i-=(i&(-i))) cnt+=c[i];
return cnt;
}
void update(int x)
{
for (int i=x;i<=n;i+=(i&(-i))) c[i]++;
}
int cmp(node x,node y)
{
if (x.x==y.x) return x.id<y.id;
return x.x<y.x;
}
int main() {
freopen("nit.in","r",stdin);
freopen("nit.out","w",stdout);
cin>>n;
for (int i=1;i<=n;i++) scanf("%d",&a[i].x),a[i].id=i;
for (int i=1;i<=n;i++) scanf("%d",&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++) mp[i]=a[i].id;
for (int i=1;i<=n;i++) d[b[i].id]=mp[i];
for (int i=1;i<=n;i++) ret=(ret+i-1-query(d[i]))%mod,update(d[i]);
cout<<ret;
}