Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- using namespace std;
- void update(int v, int L, int R, int pos, int new_val) {
- if (L == R) {
- t[v] = new_val;
- return;
- }
- int mid = (L + R) / 2;
- if (pos > mid)
- update(v * 2 + 1, mid + 1, R, pos, new_val);
- else
- update(v * 2, L, mid, pos, new_val);
- t[v] = t[v * 2] + t[v * 2 + 1];
- }
- int get(int v, int L, int R, int l, int r){
- if(l <= L && R <= r){
- return t[v];
- }
- if(R < l || L > r){
- return 0;
- }
- int mid = (L + R) / 2;
- return get(v * 2, L, mid, l, r) + get(v * 2 + 1, mid + 1, R, l, r);
- }
- int main() {
- cin >> n;
- for (int i = 1; i <= n; i++) {
- cin >> a[i];
- update(1, 1, n, a[i], 1);
- }
- cin >> m;
- for (int i = 1; i <= m; i++) {
- cin >> l >> r;
- cout << get(1, 1, n, l, r) << endl;
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement