Submission #198224

#TimeUsernameProblemLanguageResultExecution timeMemory
198224alishahali1382Cake (CEOI14_cake)C++14
35 / 100
2097 ms9772 KiB
#include <bits/stdc++.h> #pragma GCC optimize ("O2") #pragma GCC optimize ("unroll-loops") //#pragma GCC optimize("no-stack-protector,fast-math") using namespace std; typedef long long ll; typedef long double ld; typedef pair<int, int> pii; typedef pair<pii, int> piii; typedef pair<ll, ll> pll; #define debug(x) cerr<<#x<<'='<<(x)<<endl; #define debugp(x) cerr<<#x<<"= {"<<(x.first)<<", "<<(x.second)<<"}"<<endl; #define debug2(x, y) cerr<<"{"<<#x<<", "<<#y<<"} = {"<<(x)<<", "<<(y)<<"}"<<endl; #define debugv(v) cerr<<#v<<" : ";for (auto x:v) cerr<<x<<' ';cerr<<endl; #define all(x) x.begin(), x.end() #define pb push_back #define kill(x) return cout<<x<<'\n', 0; const ld eps=1e-7; const int inf=1000000010; const ll INF=10000000000000010LL; const int mod = 1000000007; const int MAXN = 250010, LOG=20; int n, m, k, u, v, x, y, t, a, b, ans; int A[MAXN], N; pii seg[MAXN<<2]; vector<int> Mx; void Set(int id, int tl, int tr, int pos, int val){ if (pos<tl || tr<=pos) return ; if (tr-tl==1){ seg[id]={val, pos}; return ; } int mid=(tl+tr)>>1; Set(id<<1, tl, mid, pos, val); Set(id<<1 | 1, mid, tr, pos, val); seg[id]=max(seg[id<<1], seg[id<<1 | 1]); } pii Get(int id, int tl, int tr, int l, int r){ if (r<=tl || tr<=l) return seg[0]; if (l<=tl && tr<=r) return seg[id]; int mid=(tl+tr)>>1; return max(Get(id<<1, tl, mid, l, r), Get(id<<1 | 1, mid, tr, l, r)); } int main(){ ios_base::sync_with_stdio(false);cin.tie(0);cout.tie(0); //freopen("input.txt", "r", stdin); //freopen("output.txt", "w", stdout); cin>>n>>k; for (int i=1; i<=n; i++) cin>>A[i], Mx.pb(i); //A[k]=0; // maybe bug A[0]=inf; A[n+1]=inf; N=n; for (int i=0; i<=n+1; i++) Set(1, 0, n+1, i, A[i]); sort(all(Mx), [](int i, int j){ return A[i]>A[j]; }); Mx.resize(min(n, 10)); cin>>m; char typ; while (m--){ cin>>typ; if (typ=='E'){ cin>>x>>y; //if (x==k) continue ; // maybe bug A[x]=++N; Set(1, 0, n+1, x, A[x]); for (int i=y-2; ~i; i--){ A[Mx[i]]=++N; Set(1, 0, n+1, Mx[i], A[Mx[i]]); } Mx.pb(x); sort(all(Mx), [](int i, int j){ return A[i]>A[j]; }); Mx.resize(unique(all(Mx))-Mx.begin()); // I hope thats just it! continue ; } cin>>x; if (x==k){ cout<<"0\n"; continue ; } if (x<k){ int mx=Get(1, 0, n+1, x, k).first; int dwn=k, up=n+1; while (up-dwn>1){ int mid=(dwn+up)>>1; if (Get(1, 0, n+1, k+1, mid+1).first>mx) up=mid; else dwn=mid; } cout<<dwn-x<<'\n'; continue ; } int mx=Get(1, 0, n+1, k+1, x+1).first; int dwn=0, up=k; while (up-dwn>1){ int mid=(dwn+up)>>1; if (Get(1, 0, n+1, mid, k).first>mx) dwn=mid; else up=mid; } cout<<x-up<<'\n'; } return 0; } /* 5 3 5 1 2 4 3 2 F 1 F 2 */
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...