제출 #1176533

#제출 시각아이디문제언어결과실행 시간메모리
1176533syanvuSimple game (IZhO17_game)C++20
100 / 100
238 ms34628 KiB
#include <bits/stdc++.h> #include <ext/pb_ds/assoc_container.hpp> #include <ext/pb_ds/tree_policy.hpp> #define SS ios_base::sync_with_stdio(0);cin.tie(nullptr);cout.tie(nullptr); // #pragma optimize("g", on) // #pragma GCC optimize ("03") // #pragma GCC target ("sse,sse2,sse3,ssse3,sse4,popcnt,abm,avx2,mmx,fma,avx,tune=native") #define int long long #define all(x) x.begin(),x.end() #define F first #define S second using namespace std; using namespace __gnu_pbds; #define ordered_set tree<pair<int,int>, null_type,less_equal<pair<int,int>>, rb_tree_tag,tree_order_statistics_node_update> const int LG = 20,N=1e6+1,inf=1e9,MOD=1e9+7; const double eps = 1e-9; int T; int t[4*N],add[4*N]; void push(int v,int tl,int tr){ t[v]+=(tr-tl+1)*add[v]; if(tl<tr){ add[v*2]+=add[v]; add[v*2+1]+=add[v]; } add[v]=0; } void upd(int v,int tl,int tr,int l,int r,int x){ push(v,tl,tr); if(tl>r || l>tr) return; if(tl>=l && r>=tr){ add[v]+=x; push(v,tl,tr); return; } int mid=(tl+tr)/2; upd(v*2,tl,mid,l,r,x); upd(v*2+1,mid+1,tr,l,r,x); t[v]=t[v*2]+t[v*2+1]; } int get(int v,int tl,int tr,int x){ push(v,tl,tr); if(tl>tr) return 0; if(tl==tr){ return t[v]; } int mid=(tl+tr)/2; if(mid>=x){ return get(v*2,tl,mid,x); } else{ return get(v*2+1,mid+1,tr,x); } } void solve() { int n,m; cin>>n>>m; int h[n+1]; for(int i=1;i<=n;i++){ cin>>h[i]; if(i>1){ upd(1,1,N,min(h[i],h[i-1]),max(h[i],h[i-1]),1); } } while(m--){ int t; cin>>t; if(t==1){ int pos,val; cin>>pos>>val; if(pos>1){ upd(1,1,N,min(h[pos],h[pos-1]),max(h[pos],h[pos-1]),-1); // h[pos]=val; upd(1,1,N,min(val,h[pos-1]),max(val,h[pos-1]),1); } if(pos<n){ upd(1,1,N,min(h[pos],h[pos+1]),max(h[pos],h[pos+1]),-1); // h[pos]=val; upd(1,1,N,min(val,h[pos+1]),max(val,h[pos+1]),1); } h[pos]=val; } else{ int H; cin>>H; cout<<get(1,1,N,H)<<'\n'; } } } signed main() { SS int t=1; if(T){ cin>>t; } while(t--){ solve(); } } //5 1 4 2
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...