제출 #391829

#제출 시각아이디문제언어결과실행 시간메모리
391829balbit케이크 (CEOI14_cake)C++14
0 / 100
2084 ms6688 KiB
#include <bits/stdc++.h> using namespace std; #define ll long long #define pii pair<int, int> #define f first #define s second #define ALL(x) (x).begin(), (x).end() #define SZ(x) (int)((x).size()) #define pb push_back #define MN(a,b) a = min(a,b) #define REP(i,n) for (int i = 0; i<n; ++i) #define REP1(i,n) for (int i = 1; i<=n; ++i) #ifdef BALBIT #define bug(...) cerr<<"#"<<__LINE__<<" "<<#__VA_ARGS__<<"- ", _do(__VA_ARGS__) template<typename T> void _do( T && x) {cerr<<x<<endl;} template<typename T, typename ...S> void _do( T && x, S && ...y) {cerr<<x<<", "; _do(y...);} #else #define bug(...) #define endl '\n' #endif // BALBIT const int maxn = 250005; const int inf = 1e9+8; pii s[maxn*4]; pii a[maxn]; pii QU(int L, int R, int o=1, int l=0, int r=maxn-1) { if ( l> R || r < L) return {inf, -1}; if (l>=L && r <= R) return s[o]; int mid = (l+r)/2; return min(QU(L,R,o*2,l,mid), QU(L,R,o*2+1,mid+1,r)); } void MO(int p, pii v, int o=1, int l=0, int r=maxn-1) { if (l > p || r < p) return; if( l == r) { s[o] = v; return; } int mid = (l+r)/2; MO(p,v,o*2,l,mid); MO(p,v,o*2+1,mid+1,r); s[o] = min(s[o*2], s[o*2+1]); } int bigger(int p, pii v, int o=1, int l=0, int r = maxn-1) { if (r < p || s[o] > v) return -1; // first thing geq v position >= p if (l == r) { return l; } int mid = (l+r)/2; if (l >= p) { if (s[o*2] <= v) return bigger(p,v,o*2,l,mid); else return bigger(p,v,o*2+1,mid+1,r); }else{ int yy = bigger(p,v,o*2,l,mid); if (yy!=-1) return yy; return bigger(p,v,o*2+1,mid+1,r); } } int biggerl(int p, pii v, int o=1, int l=0, int r = maxn-1) { // bug(p,o,l,r); if (l > p || s[o] > v) return -1; // first thing geq v position <= p if (l == r) { return l; } int mid = (l+r)/2; if (r <= p) { if (s[o*2+1] <= v) return biggerl(p,v,o*2+1,mid+1,r); else return biggerl(p,v,o*2,l,mid); }else{ int yy = biggerl(p,v,o*2+1,mid+1,r); if (yy!=-1) return yy; return biggerl(p,v,o*2,l,mid); } } signed main(){ ios::sync_with_stdio(0), cin.tie(0); bug(1,2); int n,st; cin>>n>>st; MO(0, {0,-1}); a[0] = {0,-1}; REP1(i,n) { int y; cin>>y; a[i] = {n-y+1,inf}; MO(i,a[i]); } a[n+1] = {0,-1}; MO(n+1,{0,-1}); int q; cin>>q; while (q--) { char c; cin>>c; int i; cin>>i; if (c == 'F') { if (st == i) cout<<0<<endl; else{ int L = i, R = i<st?st-1:st+1; if (L>R) swap(L,R); // pii hi = QU(L,R); pii hi = {inf, 1000000}; // bug(hi.f, hi.s); int x; if (i<st) { for (int j = i; j<st; ++j) { MN(hi, a[j]); } for (int j = st+1; ; ++j) { if (a[j] < hi) { x=j; break; } } // x = bigger(st+1,hi); }else{ for (int j = i; j>st; --j) { MN(hi, a[j]); } for (int j = st-1;; --j) { if (a[j] < hi) { x = j; break; } } // x = biggerl(st-1,hi); } // bug(x); cout<<abs(x-i)-1<<'\n'; } }else{ int e; cin>>e; a[i] = {e,q}; MO(i,{e,q}); } } }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...