Submission #1188781

#TimeUsernameProblemLanguageResultExecution timeMemory
1188781prideliqueeeSimple game (IZhO17_game)C++20
100 / 100
208 ms21720 KiB
#include<bits/stdc++.h> using namespace std; int lz[4000010]; int cnt[4000010]; int og[1000010]; void pushlz(int l,int r,int i) { cnt[i]+=lz[i]; if(l!=r) { lz[i*2]+=lz[i]; lz[i*2+1]+=lz[i]; } lz[i]=0; } void update(int l,int r,int i,int ql,int qr,int val) { pushlz(l,r,i); if(qr<l||ql>r) return; if(ql<=l&&qr>=r) { lz[i]+=val; pushlz(l,r,i); return; } int mid=(l+r)/2; update(l,mid,i*2,ql,qr,val); update(mid+1,r,i*2+1,ql,qr,val); } int ans; void query(int l,int r,int i,int index) { pushlz(l,r,i); if(index<l||index>r) return; if(l==r) { ans=cnt[i]; return; } int mid=(l+r)/2; query(l,mid,i*2,index); query(mid+1,r,i*2+1,index); } int main() { int n,m; cin>>n>>m; int a[n+1]; for(int i=1;i<=n;i++) cin>>a[i]; for(int i=2;i<=n;i++) { int a1=a[i-1],a2=a[i]; if(a1>a2) swap(a1,a2); og[a1]++; og[a2+1]--; } for(int i=1;i<=1000000;i++) og[i]+=og[i-1]; //build(1,1000001,1); for(int i=0;i<m;i++) { int x; cin>>x; if(x==1) { int index,e; cin>>index>>e; if(index!=1) { int a1=a[index]; int a2=a[index-1]; if(a1>a2) swap(a1,a2); update(1,1000000,1,a1,a2,-1); a1=a[index-1]; a2=e; if(a1>a2) swap(a1,a2); update(1,1000000,1,a1,a2,1); } if(index!=n) { int a1=a[index]; int a2=a[index+1]; if(a1>a2) swap(a1,a2); //cout<<a1<<" "<<a2<<"-1"<<endl; update(1,1000000,1,a1,a2,-1); a1=a[index+1]; a2=e; if(a1>a2) swap(a1,a2); //cout<<a1<<" "<<a2<<"1"<<endl; update(1,1000000,1,a1,a2,1); } a[index]=e; } else { int h; cin>>h; query(1,1000000,1,h); cout<<ans+og[h]<<'\n'; /*for(int j=1;j<=5;j++) { query(1,10000,1,j); cout<<ans<<endl; }*/ } } }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...