| 比赛 | 
    树状数组练习 | 
    评测结果 | 
    AAAAEWWWWW | 
    | 题目名称 | 
    公路交叉 | 
    最终得分 | 
    40 | 
    | 用户昵称 | 
    梦那边的美好CE | 
    运行时间 | 
    1.415 s  | 
    | 代码语言 | 
    C++ | 
    内存使用 | 
    4.79 MiB  | 
    | 提交时间 | 
    2025-06-11 19:04:08 | 
显示代码纯文本
#include<bits/stdc++.h>
using namespace std;
int n,m,k,T,l;
struct node {
	int x,y;
}a[123456];
int b[123456];
int lowbit(int x) {
	return x&-x;
}
void add(int x, int val) {
	for(int i=x;i<=m;i+=lowbit(i))b[i]+=val;
}
int sum(int x){
	int res=0;
	for (int i=x;i>0;i-=lowbit(i))res+=b[i];
	return res;
}
bool cmp(node a,node b){
	return (a.x == b.x? a.y < b.y : a.x < b.x);
}
void Solve(int T) {
	memset(b, 0, sizeof b);
	cin>>n>>m>>k;
	for (int i=1;i<=k;i++)cin>>a[i].x>>a[i].y;
	sort(a+1,a+k+1,cmp);
	int res=0;
	for (int i=k;i>=1;i--) {
		res+=sum(a[i].y-1);
		add(a[i].y,1);
	}
	printf("Test case %lld: %lld\n", T, res);
	return;
}
signed main() {
	freopen("road.in","r",stdin);freopen("road.out","w",stdout);
	cin>>T;
	while(T--)Solve(++l);
	return 0;
}