Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- #define int long long
- using namespace std;
- vector<int> tree;
- void setmy(int i, int x, int lx, int rx) {
- if (rx - lx == 0) {
- tree[x] += 1;
- return;
- }
- int m = (lx + rx) / 2;
- if (i <= m) {
- setmy(i, 2 * x + 1, lx, m);
- } else {
- setmy(i, 2 * x + 2, m + 1, rx);
- }
- tree[x] = tree[2 * x + 1] + tree[2 * x + 2];
- }
- long long sum(int l, int r, int x, int lx, int rx) {
- if (l > rx || lx > r) {
- return 0;
- }
- if (lx >= l && rx <= r) {
- return tree[x];
- }
- int m = (rx + lx) / 2;
- int s1 = sum(l, r, 2 * x + 1,lx,m);
- int s2 = sum(l, r, 2 * x + 2,m+1,rx);
- return s1 + s2;
- }
- int to_bin(int n) {
- int i = 1;
- for (; i <= n; i *= 2);
- return i;
- }
- int32_t main() {
- int n;
- while (cin >> n) {
- int p = to_bin(n);
- tree.assign(4*32001, 0);
- int z1, z2;
- vector<int> ans(n);
- for (int i = 0; i < n; i++) {
- cin >> z1 >> z2;
- long long ans2 = sum(0, z1, 0, 0, 32001);
- ans[ans2]+=1;
- setmy(z1, 0, 0, 32001);
- }
- for (auto e: ans){
- cout << e << '\n';
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement