This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include <bits/stdc++.h>
using namespace std;
const int maxn = 1111111;
int n,m;
int a[111111];
int t[maxn];
int sum(int r){
	int res = 0;
	for (; r >= 0; r = (r & (r+1)) - 1)
		res += t[r];
	return res;
}
void inc(int i, int delta){
	for(; i < maxn; i = (i | (i+1)))
		t[i] += delta;
}
int main(){
    //freopen("game.in","r",stdin);
    //freopen("game.out","w",stdout);
    cin >> n >> m;
    for(int i = 1; i <= n; i ++){
        cin >> a[i];
        if(i > 1){
            inc(min(a[i - 1],a[i]),  1);
            inc(max(a[i - 1],a[i]), -1);
        }
    }
    for(int i = 0; i < m; i ++){
        int t,p;
        cin >> t >> p;
        if(t == 1){
            int v;
            cin >> v;
            if(p > 1){
                inc(min(a[p - 1], a[p]), -1);
                inc(max(a[p - 1], a[p]),  1);
                inc(min(a[p - 1], v),  1);
                inc(max(a[p - 1], v), -1);
            }
            if(p < n){
                inc(min(a[p + 1], a[p]), -1);
                inc(max(a[p + 1], a[p]),  1);
                inc(min(a[p + 1], v),  1);
                inc(max(a[p + 1], v), -1);
            }
            a[p] = v;
        }
        else{
            cout << sum(p) << endl;
        }
    }
    return 0;
}
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... |