记录编号 606630 评测结果 AAAAAAAAAA
题目名称 1438.[NOIP 2013]火柴排队 最终得分 100
用户昵称 GravatarRuyi 是否通过 通过
代码语言 C++ 运行时间 0.259 s
提交时间 2025-10-01 16:08:05 内存使用 4.29 MiB
显示代码纯文本
#include<bits/stdc++.h>
#define ll long long
using namespace std;
int n;
ll v[1000001],nw[1000001],ans;
struct node{
    int num,i;
}a[1000001],b[1000001];
bool cmp(node x,node y){return x.num<y.num;}
void f(int l,int r){
    if(l!=r){
        int mid=(l+r)/2,cnt=0;
        f(l,mid);
        f(mid+1,r);
        int i=l,j=mid+1;
        for(;i<=mid&&j<=r;){
            if(v[i]<=v[j]){
                nw[++cnt]=v[i];
                i++;
            }else{
                nw[++cnt]=v[j];
                j++;
                ans+=mid-i+1;
                ans%=99999997;
            }
        }
        while(i<=mid) nw[++cnt]=v[i++];
        while(j<=r) nw[++cnt]=v[j++];
        for(int i=l;i<=r;i++) v[i]=nw[i-l+1];
    }
    return ;
}
int main(){
    freopen("MatchNOIP2013.in","r",stdin);
    freopen("MatchNOIP2013.out","w",stdout);
    cin>>n;
    for(int i=1;i<=n;i++){
        cin>>a[i].num;
        a[i].i=i;
    }
    for(int i=1;i<=n;i++){
        cin>>b[i].num;
        b[i].i=i;
    }
    sort(a+1,a+n+1,cmp);
    sort(b+1,b+n+1,cmp);
    for(int i=1;i<=n;i++) v[b[i].i]=a[i].i;
    f(1,n);
    cout<<ans<<endl;
    return 0;
}