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

struct seg {
    int sz = 1 << 19, tree[1 << 20] = {0};
    void build() {
        for(int i = sz - 1; i <= 1; i--) {
            tree[i] = tree[i*2] + tree[i*2+1];
        }
    }
    void update1(int x) {
        x += sz;
        tree[x] += 1;
        while (x /= 2) {
            tree[x] = tree[x*2] + tree[x*2+1];
        }
    }
    void update2(int x, int v) {
        x += sz;
        v += sz;
        tree[x]++;
        tree[v]--;
        //printf("%d: %d - %d: %d\n", x-sz, tree[x], v-sz, tree[v]);
        while (x /= 2) {
            tree[x] = tree[x*2] + tree[x*2+1];
        }
        while (v /= 2) {
            tree[v] = tree[v*2] + tree[v*2+1];
        }
    }
    int query(int l, int r) {
        int sum = 0;
        for(l += sz, r += sz; l <= r; l /= 2, r /= 2) {
            if(l % 2 == 1) sum += tree[l++];
            if(r % 2 == 0) sum += tree[r--];
        }
        return sum;
    }
};

int main() {
    int N,Q,tmp,tmp2,tmp3;
    seg s;
    scanf("%d %d", &N, &Q);
    vector <int> now(N+1, 0);
    for(int i = 1; i <= N; i++) {
        scanf("%d", &now[i]);
        s.update1(now[i]);
    }
    for(int i = 0; i < Q; i++) {
        scanf("%d", &tmp);
        if(tmp == 1) {
            scanf("%d", &tmp2);
            printf("%d\n", N - s.query(0, now[tmp2]) + 1);
        }
        else {
            scanf("%d %d", &tmp2, &tmp3);
            s.update2(tmp3, now[tmp2]);
            now[tmp2] = tmp3;
            /*for(int j = 1; j <= N; j++) {
                printf("%d ", now[j]);
            }
            printf("\n");*/
        }
    }
    return 0;
}

Embed on website

To embed this project on your website, copy the following code and paste it into your website's HTML: