Submission #101799

# Submission time Handle Problem Language Result Execution time Memory
101799 2019-03-20T10:12:49 Z rocketninja7 Cake (CEOI14_cake) C++14
0 / 100
2000 ms 27900 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);
                }
            }
            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: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:119: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 2029 ms 1860 KB Time limit exceeded
2 Execution timed out 2052 ms 1912 KB Time limit exceeded
3 Execution timed out 2012 ms 2040 KB Time limit exceeded
4 Incorrect 212 ms 2012 KB Output isn't correct
5 Execution timed out 2049 ms 3448 KB Time limit exceeded
6 Execution timed out 2095 ms 3448 KB Time limit exceeded
7 Execution timed out 2048 ms 3416 KB Time limit exceeded
8 Incorrect 234 ms 3576 KB Output isn't correct
# Verdict Execution time Memory Grader output
1 Incorrect 185 ms 11968 KB Output isn't correct
2 Incorrect 121 ms 11752 KB Output isn't correct
3 Incorrect 107 ms 11652 KB Output isn't correct
4 Correct 2 ms 412 KB Output is correct
5 Incorrect 282 ms 27900 KB Output isn't correct
6 Incorrect 233 ms 27880 KB Output isn't correct
7 Incorrect 179 ms 27752 KB Output isn't correct
# Verdict Execution time Memory Grader output
1 Incorrect 242 ms 1020 KB Output isn't correct
2 Incorrect 346 ms 1356 KB Output isn't correct
3 Incorrect 1442 ms 6296 KB Output isn't correct
4 Incorrect 1649 ms 6388 KB Output isn't correct
5 Incorrect 511 ms 1248 KB Output isn't correct
6 Execution timed out 2090 ms 8144 KB Time limit exceeded
7 Execution timed out 2037 ms 2380 KB Time limit exceeded
8 Execution timed out 2050 ms 11376 KB Time limit exceeded
9 Execution timed out 2049 ms 27628 KB Time limit exceeded
10 Incorrect 1748 ms 2296 KB Output isn't correct
11 Execution timed out 2064 ms 3216 KB Time limit exceeded
12 Execution timed out 2056 ms 22248 KB Time limit exceeded
13 Execution timed out 2059 ms 27720 KB Time limit exceeded