답안 #43421

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
43421 2018-03-15T23:21:51 Z Hassoony 케이크 (CEOI14_cake) C++14
0 / 100
1000 ms 5612 KB
#include<bits/stdc++.h>

using namespace std;
typedef long long ll;
const int MX=250090;
int n,Q,st,a[MX],seg[MX*5],x,y;
vector<int>v;
string s;
char oo[MX];
void build(int node,int l,int r){
    if(l==r){
        seg[node]=a[l];
        return;
    }
    int mid=(l+r)/2;
    build(node*2,l,mid);
    build(node*2+1,mid+1,r);
    seg[node]=max(seg[node*2],seg[node*2+1]);
}
bool cmp(int x,int y){
    return a[x]>a[y];
}
void up(int node,int l,int r,int ind){
    if(l>ind||r<ind)return;
    if(l==r){
        seg[node]=a[l];
        return;
    }
    int mid=(l+r)/2;
    up(node*2,l,mid,ind);
    up(node*2+1,mid+1,r,ind);
    seg[node]=max(seg[node*2],seg[node*2+1]);
}
int q(int node,int l,int r,int s,int e){
    if(l>e||r<s)return 0;
    if(l>=s&&r<=e)return seg[node];
    int mid=(l+r)/2;
    return max(q(node*2,l,mid,s,e),q(node*2+1,mid+1,r,s,e));
}
int q1(int node,int l,int r,int ind,int mn){
    if(r<ind)return 0;
    if(l==r){
        if(a[l]>mn)return l;
        return 0;
    }
    int mid=(l+r)/2;
    if(mid<ind)return q1(node*2+1,mid+1,r,ind,mn);
    if(seg[node*2]<=mn)return q1(node*2+1,mid+1,r,ind,mn);
    else return q1(node*2,l,mid,ind,mn);
}
int q2(int node,int l,int r,int ind,int mn){
    if(l>ind)return 0;
    if(l==r){
        if(a[l]>mn)return l;
        return 0;
    }
    int mid=(l+r)/2;
    if(mid+1>ind)return q2(node*2,l,mid,ind,mn);
    if(seg[node*2+1]<=mn)return q2(node*2,l,mid,ind,mn);
    else return q2(node*2+1,mid+1,r,ind,mn);
}
int main(){
    scanf("%d%d",&n,&st);
    for(int i=1;i<=n;i++){
        scanf("%d",&a[i]);
        if(a[i]>n-5)v.push_back(i);
    }
    sort(v.begin(),v.end(),cmp);
    build(1,1,n);
    scanf("%d",&Q);
    while(Q--){
        scanf("%s",&oo);s=oo;
        if(s=="E"){
            scanf("%d%d",&x,&y);
            int idx=-1;
            for(int i=0;i<10;i++){
                if(v[i]==x)idx=i;
            }
            if(idx==y-1)continue;
            if(idx==-1){
                a[x]=a[v[y-1]]+1;
                up(1,1,n,x);
                for(int i=0;i<y-1;i++){
                    a[v[i]]++;
                    up(1,1,n,v[i]);
                }
                v.pop_back();
                v.push_back(x);
                sort(v.begin(),v.end(),cmp);
    //        for(int i=1;i<=n;i++)cout<<a[i]<<" ";
  //          cout<<endl;
                continue;
            }
            if(idx>y-1){
                a[x]=a[v[y-1]]+1;
                up(1,1,n,x);
                for(int i=0;i<y-1;i++){
                    a[v[i]]++;
                    up(1,1,n,v[i]);
                }
                sort(v.begin(),v.end(),cmp);
          //  for(int i=1;i<=n;i++)cout<<a[i]<<" ";
         //   cout<<endl;
                continue;
            }
            a[x]=a[v[y-1]];
            up(1,1,n,x);
            for(int i=idx+1;i<y;i++){
                a[v[i]]++;
                up(1,1,n,v[i]);
            }
            sort(v.begin(),v.end(),cmp);
       //     for(int i=1;i<=n;i++)cout<<a[i]<<" ";
        //    cout<<endl;
        }
        else{
            scanf("%d",&x);
            if(x==st){
                puts("0");
                continue;
            }
            if(x<st){
                int mn=q(1,1,n,x,st-1);
                int ans=q1(1,1,n,st,mn);
                int res=ans-x-1;
        //        cout<<ans<<endl;
                if(ans==0)res=n-x;
                else if(ans<=st)res=st-x;
                cout<<res<<endl;
            }
            else{
                int mn=q(1,1,n,st+1,x);
                int ans=q2(1,1,n,st,mn);
                int res=x-ans-1;
      //          cout<<ans<<endl;
                if(ans==0)res=x-1;
                else if(ans>=st)res=x-st;
                cout<<res<<endl;
            }
        }
    }
}
/*
12 1
1 2 3 4 5 6 7 8 9 10 11 12
20
E 1 1
*/

Compilation message

cake.cpp: In function 'int main()':
cake.cpp:72:23: warning: format '%s' expects argument of type 'char*', but argument 2 has type 'char (*)[250090]' [-Wformat=]
         scanf("%s",&oo);s=oo;
                       ^
cake.cpp:63:25: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
     scanf("%d%d",&n,&st);
                         ^
cake.cpp:65:26: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
         scanf("%d",&a[i]);
                          ^
cake.cpp:70:19: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
     scanf("%d",&Q);
                   ^
cake.cpp:72:24: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
         scanf("%s",&oo);s=oo;
                        ^
cake.cpp:74:32: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
             scanf("%d%d",&x,&y);
                                ^
cake.cpp:117:27: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
             scanf("%d",&x);
                           ^
# 결과 실행 시간 메모리 Grader output
1 Incorrect 1 ms 248 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 360 ms 480 KB Output isn't correct
2 Incorrect 288 ms 552 KB Output isn't correct
3 Incorrect 298 ms 588 KB Output isn't correct
4 Correct 203 ms 604 KB Output is correct
5 Incorrect 420 ms 916 KB Output isn't correct
6 Incorrect 358 ms 916 KB Output isn't correct
7 Incorrect 329 ms 916 KB Output isn't correct
8 Correct 220 ms 916 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Incorrect 228 ms 2524 KB Output isn't correct
2 Incorrect 214 ms 2584 KB Output isn't correct
3 Incorrect 198 ms 2584 KB Output isn't correct
4 Incorrect 1 ms 2584 KB Output isn't correct
5 Incorrect 259 ms 4252 KB Output isn't correct
6 Incorrect 270 ms 4380 KB Output isn't correct
7 Incorrect 248 ms 4380 KB Output isn't correct
# 결과 실행 시간 메모리 Grader output
1 Incorrect 72 ms 4380 KB Output isn't correct
2 Incorrect 68 ms 4380 KB Output isn't correct
3 Incorrect 123 ms 4380 KB Output isn't correct
4 Incorrect 135 ms 4380 KB Output isn't correct
5 Incorrect 229 ms 4380 KB Output isn't correct
6 Incorrect 257 ms 4380 KB Output isn't correct
7 Incorrect 280 ms 4380 KB Output isn't correct
8 Incorrect 165 ms 4380 KB Output isn't correct
9 Incorrect 1000 ms 5468 KB Output isn't correct
10 Incorrect 737 ms 5468 KB Output isn't correct
11 Incorrect 850 ms 5468 KB Output isn't correct
12 Incorrect 940 ms 5468 KB Output isn't correct
13 Incorrect 885 ms 5612 KB Output isn't correct