Submission #136189

#TimeUsernameProblemLanguageResultExecution timeMemory
136189FedericoSSimple game (IZhO17_game)C++14
100 / 100
884 ms15640 KiB
#include <ext/pb_ds/assoc_container.hpp> #include <iostream> #include <set> using namespace std; using namespace __gnu_pbds; typedef pair<int,int> pii; typedef tree<pii, null_type, less<pii>, rb_tree_tag, tree_order_statistics_node_update> pbds; int N,M; int H[100005]; int t,x,y; pbds A,B; int c; void add(int i){ if(i==-1 or i==N-1) return; int a=H[i]; int b=H[i+1]; if(a>b) swap(a,b); A.insert({a,c++}); B.insert({b,c++}); } void remove(int i){ if(i==-1 or i==N-1) return; int a=H[i]; int b=H[i+1]; if(a>b) swap(a,b); A.erase(A.lower_bound({a,-1})); B.erase(B.lower_bound({b,-1})); } int query(int h){ return A.order_of_key({h,-1})-B.order_of_key({h,-1}); } void print(){ cout<<"******\n"; cout<<"A "; for(pii x:A) cout<<x.first<<","<<x.second<<" "; cout<<"\n"; cout<<"B "; for(pii x:B) cout<<x.first<<","<<x.second<<" "; cout<<"\n"; cout<<"******\n"; } int main(){ cin>>N>>M; for(int i=0;i<N;i++) cin>>H[i]; for(int i=0;i<N-1;i++) add(i); while(M--){ cin>>t; if(t==1){ cin>>x>>y; x--; remove(x-1); remove(x); H[x]=y; add(x-1); add(x); } else{ cin>>x; cout<<query(x)<<"\n"; } } }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...