记录编号 |
571815 |
评测结果 |
AAAAAAWWWW |
题目名称 |
孙伯符降临 |
最终得分 |
60 |
用户昵称 |
HeSn |
是否通过 |
未通过 |
代码语言 |
C++ |
运行时间 |
0.903 s |
提交时间 |
2022-06-25 11:24:17 |
内存使用 |
7.10 MiB |
显示代码纯文本
#include<bits/stdc++.h>
using namespace std;
int n, c[100010] = {0}, ans[1000010] = {0};
int a[100010], b[100010];
struct node {
int a, b, id;
}num[100010];
bool cmp(node x, node y) {
return !(x.a > y.a || (x.a == y.a && x.b > y.b));
}
int lowbit(int x) {
return x & -x;
}
int add(int x, int num) {
for(int i = x; i <= 1000010; i += lowbit(i)) {
c[i] += num;
}
return 0;
}
int query(int x) {
int sum = 0;
for(int i = x; i; i -= lowbit(i)) {
sum += c[i];
}
return sum;
}
int main() {
freopen("sunbofu.in", "r", stdin);
freopen("sunbofu.out", "w", stdout);
cin >> n;
for(int i = 1; i <= n; i ++) {
cin >> num[i].a >> num[i].b;
num[i].id = i; //id为原来数组中的位置
}
sort(num + 1, num + n + 1, cmp);
for(int i = 1; i <= n; i ++) {
ans[num[i].id] = query(num[i].b + 1); //可能有b = 0
add(num[i].b + 1, 1);
}
for(int i = 1; i <= n; i ++) {
cout << ans[i] << endl;
}
return 0;
}