NKOJ 数星星题解

#include<bits/stdc++.h>
using namespace std;
#define int long long
const int MAXN = 2e5 + 5;
int c[MAXN], ans[MAXN], a[MAXN], maxn, n, y;
int lowbit(int x){return x & (-x);}
int getsum(int x) {int sum = 0;for (int i = x; i > 0; i -= lowbit(i)) sum += c[i];return sum;}
void modify(int x, int d) {for (int i = x; i <= maxn; i += lowbit(i)) c[i] += d;}
signed main() {
    scanf("%lld", &n);
    for (int i = 1; i <= n; i++) {
        scanf("%lld%lld", &a[i], &y);
        a[i]++;
        maxn = max(a[i], maxn);
    }
    for (int i = 1; i <= n; i++) {
        y = getsum(a[i]);
        ans[y]++;
        modify(a[i], 1);
    }
    for (int i = 0; i < n; i++) {
        printf("%lld\n", ans[i]);
    }
    return 0;
}
posted @ 2023-04-28 13:52  固态H2O  阅读(3)  评论(0编辑  收藏  举报  来源