답안 #101802

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
101802 2019-03-20T10:22:11 Z rocketninja7 케이크 (CEOI14_cake) C++14
0 / 100
2000 ms 27756 KB
#include <cstdio>
#include <vector>
#include <algorithm>
using namespace std;

struct node{
    int s, e, m, v, i;
    node *l, *r;
    node(int _s, int _e): s(_s), e(_e), m((_s+_e)/2), v(0), i(_s){
        if(_s<_e){
            l=new node(s, m);
            r=new node(m+1, e);
        }
    }
    void update(int index, int val){
        if(s==e){
            v=val;
        }
        else{
            if(index<=m){
                l->update(index, val);
            }
            else{
                r->update(index, val);
            }
            if(l->v>r->v){
                v=l->v;
                i=l->i;
            }
            else{
                v=r->v;
                i=r->i;
            }
        }
    }
    int query(int si, int ei){
        if(si==s&&ei==e){
            return v;
        }
        if(ei<=m){
            return l->query(si, ei);
        }
        if(si>m){
            return r->query(si, ei);
        }
        return max(l->query(si, m), r->query(m+1, ei));
    }
    int query2(int val, int dir){
        if(s==e){
            return s;
        }
        if(dir==1){
            if(l->v<val){
                return r->query2(val, dir);
            }
            return l->query2(val, dir);
        }
        if(r->v<val){
            return l->query2(val, dir);
        }
        return r->query2(val, dir);
    }
};

int main(){
    int N, a;
    scanf("%d%d", &N, &a);
    int d[N+1];
    vector<pair<int, int> > best;
    node *lst=new node(0, a-1);
    node *rst=new node(a+1, N+1);
    for(int i=1;i<N+1;i++){
        scanf("%d", &d[i]);
        best.push_back(make_pair(-d[i], i));
        if(i<a){
            lst->update(i, d[i]);
        }
        else{
            rst->update(i, d[i]);
        }
    }
    sort(best.begin(), best.end());
    while(best.size()>10){
        best.pop_back();
    }
    int Q;
    scanf("%d", &Q);
    while(Q--){
        char op;
        scanf("\n%c", &op);
        if(op=='E'){
            int i, e;
            scanf("%d%d", &i, &e);
            e--;
            for(int j=0;j<best.size();j++){
                if(best[j].first==-d[i]){
                    best.erase(best.begin()+j);
                    break;
                }
            }
            for(int j=0;j<e;j++){
                if(best[j].second<a){
                    lst->update(best[j].second, -(--best[j].first));
                }
                else{
                    rst->update(best[j].second, -(--best[j].first));
                }
                d[best[j].second]++;
            }
            d[i]=(e>0?d[best[e-1].second]-1:d[best[e+1].second]+1);
            best.insert(best.begin()+e, make_pair(-d[i], i));
            if(i<a){
                lst->update(i, d[i]);
            }
            else{
                rst->update(i, d[i]);
            }
        }
        else{
            int b;
            scanf("%d", &b);
            if(b<a){
                printf("%d\n", rst->query2(lst->query(b, a-1), 1)-1-b);
            }
            else if(b>a){
                printf("%d\n", b-1-lst->query2(rst->query(a+1, b), -1));
            }
            else{
                printf("0\n");
            }
        }
    }
    return 0;
}

Compilation message

cake.cpp: In function 'int main()':
cake.cpp:95:26: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
             for(int j=0;j<best.size();j++){
                         ~^~~~~~~~~~~~
cake.cpp:67:10: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
     scanf("%d%d", &N, &a);
     ~~~~~^~~~~~~~~~~~~~~~
cake.cpp:73:14: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
         scanf("%d", &d[i]);
         ~~~~~^~~~~~~~~~~~~
cake.cpp:87:10: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
     scanf("%d", &Q);
     ~~~~~^~~~~~~~~~
cake.cpp:90:14: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
         scanf("\n%c", &op);
         ~~~~~^~~~~~~~~~~~~
cake.cpp:93:18: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
             scanf("%d%d", &i, &e);
             ~~~~~^~~~~~~~~~~~~~~~
cake.cpp:121:18: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
             scanf("%d", &b);
             ~~~~~^~~~~~~~~~
# 결과 실행 시간 메모리 Grader output
1 Incorrect 2 ms 384 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Execution timed out 2053 ms 1408 KB Time limit exceeded
2 Execution timed out 2068 ms 1536 KB Time limit exceeded
3 Execution timed out 2039 ms 1536 KB Time limit exceeded
4 Incorrect 178 ms 1588 KB Output isn't correct
5 Execution timed out 2039 ms 3044 KB Time limit exceeded
6 Execution timed out 2050 ms 3172 KB Time limit exceeded
7 Execution timed out 2037 ms 3200 KB Time limit exceeded
8 Incorrect 232 ms 3200 KB Output isn't correct
# 결과 실행 시간 메모리 Grader output
1 Correct 186 ms 11688 KB Output is correct
2 Incorrect 119 ms 11496 KB Output isn't correct
3 Incorrect 101 ms 11492 KB Output isn't correct
4 Correct 2 ms 256 KB Output is correct
5 Correct 279 ms 27532 KB Output is correct
6 Correct 254 ms 27496 KB Output is correct
7 Incorrect 178 ms 27284 KB Output isn't correct
# 결과 실행 시간 메모리 Grader output
1 Incorrect 157 ms 932 KB Output isn't correct
2 Incorrect 244 ms 1116 KB Output isn't correct
3 Incorrect 1030 ms 6076 KB Output isn't correct
4 Incorrect 1077 ms 6148 KB Output isn't correct
5 Incorrect 365 ms 900 KB Output isn't correct
6 Execution timed out 2016 ms 8036 KB Time limit exceeded
7 Incorrect 1783 ms 2076 KB Output isn't correct
8 Execution timed out 2025 ms 11120 KB Time limit exceeded
9 Execution timed out 2037 ms 27368 KB Time limit exceeded
10 Incorrect 1360 ms 1784 KB Output isn't correct
11 Execution timed out 2012 ms 3196 KB Time limit exceeded
12 Execution timed out 2015 ms 22116 KB Time limit exceeded
13 Execution timed out 2029 ms 27756 KB Time limit exceeded