码迷,mamicode.com
首页 > 其他好文 > 详细

QAQ

时间:2017-12-23 14:26:49      阅读:151      评论:0      收藏:0      [点我收藏+]

标签:gpo   pos   img   git   ++   span   amp   gif   print   

 

 

技术分享图片
#include<cstdio>
#include<cstring>
#include<cctype>
#include<algorithm>
#define lowbit(x) (x&-x)
using namespace std;
int read(){
    char c;int s=0,t=1;
    while(!isdigit(c=getchar()))if(c==-)t=-1;
    do{s=s*10+c-0;}while(isdigit(c=getchar()));
    return s*t;
}
const int maxn=100010;
int b[maxn],d[maxn],ans[maxn],n,m,tot=0,c[maxn];
struct cyc{int t,kind,x,y;}a[maxn],e[maxn];
void modify(int x,int k){for(int i=x;i<=n;i+=lowbit(i))c[i]+=k;}
int query(int x){int ans=0;for(int i=x;i>=1;i-=lowbit(i))ans+=c[i];return ans;}
bool cmp(cyc a,cyc b){return a.x<b.x||(a.x==b.x&&a.y<b.y)||(a.x==b.x&&a.y==b.y&&a.t<b.t);}
void CDQ(int l,int r){
    if(l==r)return;
    int mid=(l+r)>>1;
    for(int i=l;i<=r;i++){
        if(a[i].t<=mid&&a[i].kind==1)modify(a[i].y,-1);
        if(a[i].t>mid&&a[i].kind==0)ans[a[i].t/2]+=query(n)-query(a[i].y);
    }
    for(int i=l;i<=r;i++)if(a[i].t<=mid&&a[i].kind==1)modify(a[i].y,1);
    int x1=l-1,x2=mid;
    for(int i=l;i<=r;i++)if(a[i].t<=mid)e[++x1]=a[i];else e[++x2]=a[i];
    for(int i=l;i<=r;i++)a[i]=e[i];
    CDQ(l,mid);CDQ(mid+1,r);
}
int main(){
    n=read();m=read();
    int ANS=0;
    for(int i=1;i<=n;i++){
        b[i]=read();d[b[i]]=i;
        modify(b[i],1);
        ANS+=i-query(b[i]);
    }
    for(int i=1;i<=m;i++){
        int x=read();
        a[++tot]=(cyc){tot,1,d[x],x};
        a[++tot]=(cyc){tot,0,d[x],x};
    }
    sort(a+1,a+tot+1,cmp);
    CDQ(1,tot);
    for(int i=0;i<m;i++){
        printf("%d\n",ANS);
        ANS-=ans[i];
    }
    return 0;
}
View Code

 

QAQ

标签:gpo   pos   img   git   ++   span   amp   gif   print   

原文地址:http://www.cnblogs.com/onioncyc/p/8093055.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!