pku 3067 Japan 树状数组求逆序数

来源:互联网 发布:反射镜的琼斯矢量矩阵 编辑:程序博客网 时间:2024/06/14 12:31
/*之前一直求的是正序数绕过过来错了好几遍因为像44312这种数据*/#include<cstdio>#include<cstring>#include<algorithm>using namespace std;int k,m,n;int c[1000010];struct node{int x,y;};node p[1000010];bool cmp(node a,node b){if(a.x==b.x)return a.y<b.y;elsereturn a.x<b.x;}int lowbit(int x){return x&(-x);}void update(int i){while(i<=m){c[i]++;i+=lowbit(i);}}int query(int i){int sum=0;while(i>0){sum+=c[i];i-=lowbit(i);}return sum;}int main(){int t,i;__int64 ans;int cnt=1;scanf("%d",&t);while(t--){ans=0;memset(c,0,sizeof(c));scanf("%d%d%d",&n,&m,&k);for(i=1;i<=k;i++)scanf("%d%d",&p[i].x,&p[i].y);sort(p+1,p+1+k,cmp);for(i=1;i<=k;i++){ans+=i-1-query(p[i].y);update(p[i].y);}//ans=m*(m-1)/2-ans;printf("Test case %d: %I64d\n",cnt++,ans);}return 0;}

原创粉丝点击