#include<bits/stdc++.h>
using namespace std;


struct node{
    map<int, int> cnt;
    int delta, prom, lv, rv;
    node *left, *right;
    node() : left(NULL), right(NULL), delta(0), prom(0) {}

    void update(node *a, node *b) {
        cnt.clear();
        delta = 0;

        for (pair<int, int> i : a->cnt) {
            cnt[i.first + a->delta] = i.second;
        }
        for (pair<int, int> i : b->cnt) {
            cnt[i.first + b->delta] += i.second;
        }
    }

    void push() {
        left->delta += prom;
        right->delta += prom;
        left->prom += prom;
        right->prom += prom;
        prom = 0;
        /// prom - promise
    }

    int get(int l, int r, int x) {
        if (l > rv || lv > r) {
            return 0;
        }
        if (l <= lv && rv <= r) {
            return cnt.find(x - delta) != cnt.end() ? cnt[x - delta] : 0;
            /// here we can just write return cnt[x-delta], but it will create empty cell
        }
        push();
        return left->get(l, r, x) + right->get(l, r, x);
    }

    void inc(int l, int r, int toInc) {
        if (l > rv || lv > r) {
            return;
        }
        if (l <= lv && rv <= r) {
            delta += toInc;
            prom += toInc;
            return;
        }
        left->inc(l, r, toInc);
        right->inc(l, r, toInc);
        update(left, right);
    }
};


main() {
    return 0;
}
