比赛 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;
}