首先排序下。。。。
AC代码如下:
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
const int MAX_N = 1000;
struct Node{
int a, b;
};
Node node[1000010];
int sum[MAX_N+5];
int M, N, K;
bool cmp( Node a, Node b ){
if( a.a < b.a ){
return false;
}else if( a.a > b.a ){
return true;
}else{
if( a.b < b.b ){
return false;
}else{
return true;
}
}
}
inline int lowbit( int x ){
return x&-x;
}
int getsum( int x ){
int ans = 0;
while( x > 0 ){
ans += sum[x];
x -= lowbit( x );
}
return ans;
}
void updata( int x, int val ){
while( x <= N ){
sum[x] += val;
x += lowbit( x );
}
}
int main(){
int T, Case = 1;
scanf( "%d", &T );
while( T-- ){
scanf( "%d%d%d", &M, &N, &K );
for( int i = 1; i <= K; i++ ){
scanf( "%d%d", &node[i].a, &node[i].b );
}
sort( node + 1, node + 1 + K, cmp );
__int64 ans = 0;
memset( sum, 0, sizeof( sum ) );
for( int i = 1; i <= K; i++ ){
ans += getsum( node[i].b - 1 );
updata( node[i].b, 1 );
}
printf( "Test case %d: %I64d\n", Case++, ans );
}
return 0;
}