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;
- vector<int> ans;
- 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, lx, m);
- } else {
- setmy(i, 2 * x + 1, m + 1, rx);
- }
- tree[x] = tree[2 * x] + tree[2 * x + 1];
- }
- 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;
- return sum(l, r, 2 * x, lx, m) + sum(l, r, 2 * x + 1, m + 1, rx);
- }
- int to_bin(int n) {
- int i = 1;
- for (; i <= n; i *= 2);
- return i;
- }
- int32_t main() {
- int n;
- while (cin >> n) {
- ans.resize(n);
- fill(ans.begin(), ans.end(), 0);
- int p = to_bin(n);
- tree.resize(2 * p);
- fill(tree.begin(), tree.end(), 0);
- int z1, z2;
- for (int i = 0; i < n; i++) {
- cin >> z1 >> z2;
- setmy(z1, 1, 1, p);
- long long ans2 = sum(1, z1, 1, 1, p);
- ans[ans2-1]+=1;
- }
- for (int e: ans){
- cout << e << '\n';
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement