제출 #1169345

#제출 시각아이디문제언어결과실행 시간메모리
1169345mnbvcxz123Simple game (IZhO17_game)C++20
100 / 100
34 ms5192 KiB
#include<bits/stdc++.h> using namespace std; using ll=long long; struct Fen{ int n; vector<int>tree; void init(int N){ n=N; tree.resize(n+5); } void update(int p, int x){ for(;p<=n;p+=p&-p)tree[p]+=x; } int query(int i){ int ret=0; for(;i;i-=i&-i)ret+=tree[i]; return ret; } }; int n,q; int a[100005]; Fen fen; int main(){ ios::sync_with_stdio(false); cin.tie(nullptr); cout.tie(nullptr); cin>>n>>q; fen.init(1e6); for(int i=1;i<=n;++i){ cin>>a[i]; if(i>1){ int left=min(a[i],a[i-1]); int right=max(a[i],a[i-1]); fen.update(left,1); fen.update(right,-1); } } while(q--){ int c; cin>>c; if(c==1){ int i,x; cin>>i>>x; if(i>1){ int left=min(a[i],a[i-1]); int right=max(a[i],a[i-1]); fen.update(left,-1); fen.update(right,1); } if(i<n){ int left=min(a[i],a[i+1]); int right=max(a[i],a[i+1]); fen.update(left,-1); fen.update(right,1); } a[i]=x; if(i>1){ int left=min(a[i],a[i-1]); int right=max(a[i],a[i-1]); fen.update(left,1); fen.update(right,-1); } if(i<n){ int left=min(a[i],a[i+1]); int right=max(a[i],a[i+1]); fen.update(left,1); fen.update(right,-1); } }else{ int x; cin>>x; cout<<fen.query(x)<<'\n'; } } }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...