Submission #1361095

#TimeUsernameProblemLanguageResultExecution timeMemory
1361095gvancakSimple game (IZhO17_game)C++20
100 / 100
153 ms18168 KiB
#include <bits/stdc++.h>
#define f first
#define s second
#define pb push_back
#define mp make_pair
#define ll long long
using namespace std;
const ll N=1e6+5;
ll a[N],t[4*N],y,z,x,n,q,mx,mn,k,ans,ind;
bool ok,okk;
string s,s1;
void update(int idx,int tl,int tr,int ind,int val){
	if (tr-tl==1){
		t[idx]+=val; return ;
	}
	int tm=(tl+tr)/2;
	if (ind<tm) update(idx*2,tl,tm,ind,val); else update(idx*2+1,tm,tr,ind,val);
	t[idx]=t[idx*2]+t[idx*2+1];
}
ll query(int idx,int tl,int tr,int l,int r){
	if (tl>=r || tr<=l) return 0;
	if (l<=tl && tr<=r) return t[idx];
	int tm=(tl+tr)/2;
	return query(idx*2,tl,tm,l,r)+query(idx*2+1,tm,tr,l,r);
}
int main(){
    ios_base::sync_with_stdio(false);
    cin.tie(0),cout.tie(0);
    cin >> n >> q;
    for (int i=1; i<=n; i++) {
    	cin >> a[i];
	}int H=1e6;
	for (int i=2; i<=n; i++){
		x=min(a[i],a[i-1])+1; y=max(a[i-1],a[i]);
		if (x>=y) continue;
		update(1,1,H+1,x,1);
		update(1,1,H+1,y,-1);
	}
	
	while (q--){
		cin>>z;
		if (z==1){
			cin >> x >> y;
			if (x>1){
				int mn=min(a[x],a[x-1])+1; int mx=max(a[x],a[x-1]);
				if (mn<mx) {
				update(1,1,H+1,mn,-1);
				update(1,1,H+1,mx,1);
				}
			}
			if (x<n){
				int mn=min(a[x],a[x+1])+1; int mx=max(a[x],a[x+1]);
				if (mn<mx) {
				update(1,1,H+1,mn,-1);
				update(1,1,H+1,mx,1);
				}
			}
			a[x]=y;
			if (x>1){
				int mn=min(a[x],a[x-1])+1; int mx=max(a[x],a[x-1]);
				if (mn<mx) {
				update(1,1,H+1,mn,1);
				update(1,1,H+1,mx,-1);
				}
			}
			if (x<n){
				int mn=min(a[x],a[x+1])+1; int mx=max(a[x],a[x+1]);
				if (mn<mx) {
				update(1,1,H+1,mn,1);
				update(1,1,H+1,mx,-1);
				}
			}
		}
		else{
			cin >> x;
			cout<<query(1,1,H+1,1,x+1)<<endl;
		}
	}
    

}
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...