//============================================================================
// Name : POJ_3067.cpp
// Author : tiger
// Version :
// Copyright : Your copyright notice
// Description : Hello World in C++, Ansi-style
//============================================================================
#include <iostream>
#include <ctype.h>
using namespace std;
#define MAX 1001
int map[MAX][MAX];
int c[MAX][MAX];
int n,m;
int lowbit(int x)
{
return x&(-x);
}
void update(int x,int y, int add)
{
int i,j;
for(i = x; i <=n;i+=lowbit(i))
{
for(j = y; j<= m; j+= lowbit(j))
{
c[i][j] += add;
}
}
}
int SUM(int x,int y)
{
int i,j;
int sum=0;
for(i = x; i > 0;i-=lowbit(i))
{
for(j = y; j > 0; j-= lowbit(j))
{
sum += c[i][j];
}
}
return sum;
}
int main() {
freopen("in","r",stdin);
int t,k,i,j;
scanf("%d",&t);
int a,b;
__int64 sum;
for(i = 1; i <= t; i++)
{
memset(c,0,sizeof(c));
memset(map,0,sizeof(map));
scanf("%d %d %d",&n,&m,&k);
for(j = 0; j < k; j++)
{
scanf("%d %d",&a,&b);
map[a][m+1-b] = 1;
update(a,m+1-b,1);
}
sum = 0;
for(j = 1; j <= n; j++)
{
for(k = 1; k <= m; k++)
{
if(map[j][k])
{
sum += (__int64)SUM(j-1,k-1);
}
}
}
printf("Test case %d: %I64d/n",i,sum);
}
return 0;
}
POJ_3067_树状数组
最新推荐文章于 2022-02-25 19:38:17 发布