Japan 树状数组加逆序数...

来源:互联网 发布:泡妞宝鉴天地知我心txt 编辑:程序博客网 时间:2024/05/22 00:17
哎~又有学到知识...不过是以翘课被抓为代价的...咕~~(╯﹏╰)
 
#include <stdio.h>#include <stdlib.h>#include <string.h>__int64 s;int m;__int64 b[10050];struct node {    int x;    int y;};node a[1000005];int cmp(const void *a,const void *b){    if (  ( *(node*)a ).x ==( * ( node* ) b ).x)         return ( * (node* ) a ).y-( *(node*) b ).y;    return (*(node*)a).x-(*(node*)b).x;}int lowbit(int x){    return x&(-x);}void inc(int x){    while (x<=m)    {        b[x]+=1;        x+=lowbit(x);    }}__int64 sum(int x){    __int64 sum=0;    while (x>0)    {        sum+=b[x];        x-=lowbit(x);    }    return sum;}int main(){    int T,i,n,k,t=1;    scanf("%d",&T);    while (T--)    {        s=0;        memset(b,0,sizeof(b));        memset(a,0,sizeof(a));        scanf("%d%d%d",&n,&m,&k);        for (i=0;i<k;i++)        {            scanf("%d%d",&a[i].x,&a[i].y);        }        qsort(a,k,sizeof(a[0]),cmp);        for (i=0;i<k;i++)        {            s+=i-sum(a[i].y);            inc(a[i].y);        }        printf("Test case %d: %I64d\n",t++,s);    }


原创粉丝点击