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