답안 #391851

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
391851 2021-04-20T03:45:19 Z balbit 케이크 (CEOI14_cake) C++14
0 / 100
2000 ms 10748 KB
#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;
double s[maxn*4];
double a[maxn];

double QU(int L, int R, int o=1, int l=0, int r=maxn-1) {
    if ( l> R || r < L) return inf;
    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, double 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, double 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, double 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, -inf);
    a[0] = -inf;
    vector<pair<double, int> > v;
    REP1(i,n) {
        int y; cin>>y;
        a[i] = n-y+1;
        v.pb({a[i], i});
//        bug(a[i].f, a[i].s);
        MO(i,a[i]);
    }
    sort(ALL(v));
    while (SZ(v) > 10) v.pop_back();
    a[n+1] = -inf;
    MO(n+1,-inf);
    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 = st, R = st;
                    while (i < L || i > R) {
                        if (a[L-1] > a[R+1]) --L;
                        else ++R;
                    }
                    cout<<R-L<<endl;
                }
                continue;
                int L = i, R = i<st?st-1:st+1;
                if (L>R) swap(L,R);
//                pii hi = QU(L,R);
                double hi = inf;
//                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;
            REP(j, SZ(v)) {
                if (v[j].s == i) {
                    v.erase(v.begin()+j);
                    break;
                }
            }
            double x;
            if( e == 1) {
                x = v[0].f-1;
            }else{
                x = (v[e-1].f + v[e].f) /2.0;
            }
            v.pb({x,i});
            for (int j = SZ(v)-1; j>0; --j) {
                if (v[j-1] > v[j]) {
                    swap(v[j-1], v[j]);
                }else break;
            }
            while (SZ(v) > 10) v.pop_back();
            a[i] = x;
            MO(i,x);
        }
    }

}
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 332 KB Output is correct
2 Incorrect 1 ms 332 KB Output isn't correct
3 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 211 ms 972 KB Output isn't correct
2 Incorrect 188 ms 972 KB Output isn't correct
3 Incorrect 217 ms 972 KB Output isn't correct
4 Correct 200 ms 972 KB Output is correct
5 Incorrect 224 ms 1504 KB Output isn't correct
6 Incorrect 208 ms 1484 KB Output isn't correct
7 Incorrect 219 ms 1484 KB Output isn't correct
8 Correct 224 ms 1508 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Execution timed out 2032 ms 4800 KB Time limit exceeded
2 Execution timed out 2079 ms 4944 KB Time limit exceeded
3 Execution timed out 2048 ms 4932 KB Time limit exceeded
4 Correct 1 ms 332 KB Output is correct
5 Execution timed out 2074 ms 10604 KB Time limit exceeded
6 Execution timed out 2045 ms 10620 KB Time limit exceeded
7 Execution timed out 2082 ms 10748 KB Time limit exceeded
# 결과 실행 시간 메모리 Grader output
1 Incorrect 74 ms 588 KB Output isn't correct
2 Incorrect 112 ms 740 KB Output isn't correct
3 Incorrect 1433 ms 2824 KB Output isn't correct
4 Incorrect 1355 ms 2764 KB Output isn't correct
5 Incorrect 162 ms 748 KB Output isn't correct
6 Execution timed out 2081 ms 4108 KB Time limit exceeded
7 Incorrect 811 ms 1300 KB Output isn't correct
8 Incorrect 213 ms 4584 KB Output isn't correct
9 Execution timed out 2085 ms 10492 KB Time limit exceeded
10 Incorrect 533 ms 1516 KB Output isn't correct
11 Execution timed out 2078 ms 2224 KB Time limit exceeded
12 Execution timed out 2075 ms 8688 KB Time limit exceeded
13 Execution timed out 2074 ms 10452 KB Time limit exceeded