树状数组套路就这样,确定一根轴,但是刚学建模不好建。
//
// main.cpp
// Richard
//
// Created by 邵金杰 on 16/8/21.
// Copyright © 2016年 邵金杰. All rights reserved.
//
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
typedef long long LL;
const int maxn=1000+10;
LL c[maxn];
struct edge{
int u,v;
bool operator < (const edge &e) const {
if(u!=e.u) return u<e.u;
return v<e.v;
}
}edge[500000];
int n,m,k;
void add(int x)
{
while(x<=m)
{
c[x]++;
x+=(x&(-x));
}
}
LL sum(int x)
{
LL s=0;
while(x)
{
s+=c[x];
x-=(x&(-x));
}
return s;
}
int main()
{
int t,kase=0;
scanf("%d",&t);
while(t--)
{
memset(c,0,sizeof(c));
scanf("%d%d%d",&n,&m,&k);
for(int i=0;i<k;i++)
{
scanf("%d%d",&edge[i].u,&edge[i].v);
}
sort(edge,edge+k);
LL ans=0;
for(int i=0;i<k;i++)
{
ans+=sum(m)-sum(edge[i].v);
add(edge[i].v);
}
printf("Test case %d: %lld\n",++kase,ans);
}
return 0;
}