Submission #101800

# Submission time Handle Problem Language Result Execution time Memory
101800 2019-03-20T10:19:27 Z rocketninja7 Cake (CEOI14_cake) C++14
0 / 100
2000 ms 27688 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);
            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-1, 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:94: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:120:18: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
             scanf("%d", &b);
             ~~~~~^~~~~~~~~~
# Verdict Execution time Memory Grader output
1 Incorrect 2 ms 384 KB Output isn't correct
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Execution timed out 2047 ms 1868 KB Time limit exceeded
2 Execution timed out 2036 ms 1536 KB Time limit exceeded
3 Execution timed out 2054 ms 1912 KB Time limit exceeded
4 Incorrect 262 ms 1536 KB Output isn't correct
5 Execution timed out 2017 ms 3292 KB Time limit exceeded
6 Execution timed out 2048 ms 3200 KB Time limit exceeded
7 Execution timed out 2049 ms 3200 KB Time limit exceeded
8 Incorrect 194 ms 3200 KB Output isn't correct
# Verdict Execution time Memory Grader output
1 Incorrect 144 ms 11624 KB Output isn't correct
2 Incorrect 122 ms 11564 KB Output isn't correct
3 Incorrect 103 ms 11524 KB Output isn't correct
4 Correct 2 ms 256 KB Output is correct
5 Incorrect 259 ms 27492 KB Output isn't correct
6 Incorrect 226 ms 27688 KB Output isn't correct
7 Incorrect 165 ms 27240 KB Output isn't correct
# Verdict Execution time Memory Grader output
1 Incorrect 148 ms 884 KB Output isn't correct
2 Incorrect 191 ms 1000 KB Output isn't correct
3 Incorrect 915 ms 6104 KB Output isn't correct
4 Incorrect 967 ms 6128 KB Output isn't correct
5 Incorrect 346 ms 860 KB Output isn't correct
6 Execution timed out 2050 ms 7960 KB Time limit exceeded
7 Incorrect 1712 ms 2092 KB Output isn't correct
8 Execution timed out 2057 ms 11120 KB Time limit exceeded
9 Execution timed out 2037 ms 27364 KB Time limit exceeded
10 Incorrect 1315 ms 1992 KB Output isn't correct
11 Execution timed out 2062 ms 3188 KB Time limit exceeded
12 Execution timed out 2017 ms 22116 KB Time limit exceeded
13 Execution timed out 2039 ms 27528 KB Time limit exceeded