답안 #101803

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
101803 2019-03-20T10:26:04 Z rocketninja7 케이크 (CEOI14_cake) C++14
0 / 100
1055 ms 28904 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);
            if(N==1){
                continue;
            }
            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(best.size()>10){
                best.pop_back();
            }
            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:98: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:127: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 256 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 372 ms 1500 KB Output is correct
2 Incorrect 226 ms 1656 KB Output isn't correct
3 Correct 249 ms 1536 KB Output is correct
4 Incorrect 174 ms 1536 KB Output isn't correct
5 Correct 402 ms 3344 KB Output is correct
6 Incorrect 310 ms 3320 KB Output isn't correct
7 Correct 297 ms 3320 KB Output is correct
8 Incorrect 235 ms 3200 KB Output isn't correct
# 결과 실행 시간 메모리 Grader output
1 Correct 152 ms 11708 KB Output is correct
2 Incorrect 116 ms 11572 KB Output isn't correct
3 Incorrect 106 ms 11500 KB Output isn't correct
4 Correct 2 ms 256 KB Output is correct
5 Correct 252 ms 27624 KB Output is correct
6 Correct 249 ms 27596 KB Output is correct
7 Incorrect 173 ms 27240 KB Output isn't correct
# 결과 실행 시간 메모리 Grader output
1 Incorrect 35 ms 800 KB Output isn't correct
2 Incorrect 30 ms 1016 KB Output isn't correct
3 Incorrect 106 ms 5940 KB Output isn't correct
4 Incorrect 129 ms 5860 KB Output isn't correct
5 Incorrect 99 ms 888 KB Output isn't correct
6 Incorrect 192 ms 7948 KB Output isn't correct
7 Incorrect 166 ms 2040 KB Output isn't correct
8 Correct 239 ms 11120 KB Output is correct
9 Incorrect 1055 ms 28904 KB Output isn't correct
10 Incorrect 341 ms 1740 KB Output isn't correct
11 Incorrect 633 ms 4212 KB Output isn't correct
12 Correct 1044 ms 23544 KB Output is correct
13 Correct 669 ms 28648 KB Output is correct