#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;
}
To embed this project on your website, copy the following code and paste it into your website's HTML: