[NOIP 2013]火柴排队 逆序对

来源:互联网 发布:ubuntu删除文件命令 编辑:程序博客网 时间:2024/05/17 04:26

代码

#include <cstdio>#include <iostream>#include <cstring>#include <algorithm>#define MOD 99,999,997 using namespace std;int n,c[200000],index[200000];int Lowbit(int x){    return x&(-x);}void Update(int x){    while(x<=n){        c[x]++;        x+=Lowbit(x);    }}int Ask(int x){    int sum=0;    while(x>0){        sum+=c[x];        x-=Lowbit(x);    }    return sum;}struct Holder{    int num,v;}a[200000],b[200000];int cmp(Holder x,Holder y) {    return x.v<y.v;}int main() {    cin>>n;    for(int i=1;i<=n;i++){        scanf("%d",&a[i].v);        a[i].num=i;    }    for(int i=1;i<=n;i++){        scanf("%d",&b[i].v);        b[i].num=i;    }    sort(a+1,a+1+n,cmp);    sort(b+1,b+1+n,cmp);        for(int i=1;i<=n;i++){        index[a[i].num]=b[i].num;    }    int ans=0;    for(int i=1;i<=n;i++){        Update(index[i]);        ans=(ans+i-Ask(index[i]))%99999997;    }    cout<<ans<<endl;}
0 0
原创粉丝点击