记录编号 |
601337 |
评测结果 |
AAAAAAAAAA |
题目名称 |
1974.公路交叉 |
最终得分 |
100 |
用户昵称 |
对立猫猫对立 |
是否通过 |
通过 |
代码语言 |
C++ |
运行时间 |
1.615 s |
提交时间 |
2025-06-16 19:37:33 |
内存使用 |
8.15 MiB |
显示代码纯文本
#include <bits/stdc++.h>
#define Tairitsu return 0;
#define lowbit(x) (x & -x)
#define int long long
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 <= m; 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;
}
signed main() {
freopen("road.in","r",stdin);
freopen("road.out","w",stdout);
scanf("%lld", &T);
N = T;
while (T--) {
memset(f,0,sizeof(f));
v.clear();
scanf("%lld %lld %lld", &n, &m, &k);
for (int i = 1; i <= k; i++) {
scanf("%lld %lld", &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 %lld: %lld\n", N - T, cnt);
}
Tairitsu
}