F,Japan

#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
typedef struct node
{
int x;
int y;
}as;
as a[1000001];
int c[1003];
int n,m,k;
bool cmp(node aa,node bb)
{
if(aa.x==bb.x)
return aa.y<bb.y;
return aa.x<bb.x;
}
int lowbit(int x)
{
return x&(-x);
}
void update(int i,int x)
{
while(i<=m)
{
c[i]+=x;
i+=lowbit(i);
}
}
int getsum(int i)
{
int sum=0;
while(i)
{
sum+=c[i];
i-=lowbit(i);
}
return sum;
}

int main()
{
int i,t,j;
__int64 s;
scanf("%d",&t);
for(i=1;i<=t;i++)
{
s=0;
scanf("%d%d%d",&n,&m,&k);
for(j=0;j<k;j++)
scanf("%d%d",&a[j].x,&a[j].y);
         sort(a+1,a+k+1,cmp);
memset(c,0,sizeof(c));
for(j=0;j<k;j++)
{
s+=j-getsum(a[j].y);
update(a[j].y,1);
}
printf("Test case %d: %I64d\n",i,s);
}
return 0;
}

————————————————————————————————————————
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
typedef struct node
{
int x;
int y;
}as;
as a[1000001];
int c[1003];
int n,m,k;
int cmp(const void *aa,const void *bb)
{
node *a=(node *)aa;
node *b=(node *)bb;
if(a->x==b->x)
return a->y-b->y;
return a->x-b->x;
}
int lowbit(int x)
{
return x&(-x);
}
void update(int i,int x)
{
while(i<=m)
{
c[i]+=x;
i+=lowbit(i);
}
}
int getsum(int i)
{
int sum=0;
while(i)
{
sum+=c[i];
i-=lowbit(i);
}
return sum;
}

int main()
{
int i,t,j;
__int64 s;
scanf("%d",&t);
for(i=1;i<=t;i++)
{
s=0;
scanf("%d%d%d",&n,&m,&k);
for(j=0;j<k;j++)
scanf("%d%d",&a[j].x,&a[j].y);
         qsort(a,k,sizeof(a[0]),cmp);
memset(c,0,sizeof(c));
for(j=0;j<k;j++)
{
s+=j-getsum(a[j].y);
update(a[j].y,1);
}
printf("Test case %d: %I64d\n",i,s);
}
return 0;
}

posted @ 2014-05-19 19:45  awenzero  阅读(112)  评论(0编辑  收藏  举报