| 比赛 | 
    树状数组练习 | 
    评测结果 | 
    WWWWWWWWWW | 
    | 题目名称 | 
    公路交叉 | 
    最终得分 | 
    0 | 
    | 用户昵称 | 
    对立猫猫对立 | 
    运行时间 | 
    1.559 s  | 
    | 代码语言 | 
    C++ | 
    内存使用 | 
    5.83 MiB  | 
    | 提交时间 | 
    2025-06-11 20:07:45 | 
显示代码纯文本
#include <bits/stdc++.h>
#define Tairitsu return 0;
#define lowbit(x) (x & -x)
using namespace std;
int n, m, k, T, N;
int a, b;
int f[10005];
vector<pair<int, int> > v;
void add(int x, int y) {
	for (; x <= n; x += lowbit(x)) f[x] += y;
}
int ask(int x) {
	int ans = 0;
	for (; x; x -= lowbit(x)) ans += f[x];
	return ans;
}
bool cmp(pair<int, int> a, pair<int, int> b) {
	if (a.first != b.first) return a.first < b.first;
	return a.second < b.second;
}
int main() {
	freopen("road.in","r",stdin);
	freopen("road.out","w",stdout);
	scanf("%d", &T);
	N = T;
	while (T--) {
		v.clear();
		scanf("%d %d %d", &n, &m, &k);
		for (int i = 1; i <= k; i++) {
			scanf("%d %d", &a, &b);
			v.push_back(make_pair(a, b));
		}
		sort(v.begin(), v.end(), cmp);
		int cnt = 0;
		for (int i = v.size() - 1; i >= 0; i--) {
			cnt += ask(v[i].second - 1);
			add(v[i].second, 1);
		}
		printf("Test case %d: %d\n", N - T, cnt);
	}
	Tairitsu
}