Submission #43418

# Submission time Handle Problem Language Result Execution time Memory
43418 2018-03-15T22:52:14 Z Hassoony Cake (CEOI14_cake) C++14
0 / 100
1093 ms 5576 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-10)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)continue;
        //    cout<<idx<<" "<<v[y-1]<<endl;
            if(idx<y){
                a[x]=a[v[y-1]];
                up(1,1,n,x);
                for(int i=y-1;i<v.size();i++){
                    if(v[i]==x)continue;
                    a[v[i]]++;
                    up(1,1,n,v[i]);
                }
            }
            else {
                a[x]=a[v[y-1]]+1;
                up(1,1,n,x);
                for(int i=0;i<y-1;i++){
                    if(v[i]==x)continue;
                    a[v[i]]++;
                    up(1,1,n,v[i]);
                }
            }
            int ok=0;
            for(auto pp:v)if(pp==x)ok=1;
            if(!ok)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;
        }
        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;
            }
        }
    }
}

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:84:32: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
                 for(int i=y-1;i<v.size();i++){
                                ^
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:107:27: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
             scanf("%d",&x);
                           ^
# Verdict Execution time Memory Grader output
1 Incorrect 2 ms 248 KB Output isn't correct
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Incorrect 456 ms 480 KB Output isn't correct
2 Incorrect 528 ms 552 KB Output isn't correct
3 Incorrect 462 ms 624 KB Output isn't correct
4 Incorrect 431 ms 624 KB Output isn't correct
5 Incorrect 511 ms 824 KB Output isn't correct
6 Incorrect 424 ms 840 KB Output isn't correct
7 Incorrect 494 ms 968 KB Output isn't correct
8 Incorrect 464 ms 968 KB Output isn't correct
# Verdict Execution time Memory Grader output
1 Incorrect 223 ms 2812 KB Output isn't correct
2 Incorrect 205 ms 2812 KB Output isn't correct
3 Incorrect 197 ms 2812 KB Output isn't correct
4 Incorrect 1 ms 2812 KB Output isn't correct
5 Incorrect 247 ms 4476 KB Output isn't correct
6 Incorrect 246 ms 4476 KB Output isn't correct
7 Incorrect 225 ms 4476 KB Output isn't correct
# Verdict Execution time Memory Grader output
1 Incorrect 89 ms 4476 KB Output isn't correct
2 Incorrect 86 ms 4476 KB Output isn't correct
3 Incorrect 188 ms 4476 KB Output isn't correct
4 Incorrect 139 ms 4476 KB Output isn't correct
5 Incorrect 223 ms 4476 KB Output isn't correct
6 Incorrect 309 ms 4476 KB Output isn't correct
7 Incorrect 360 ms 4476 KB Output isn't correct
8 Incorrect 278 ms 4476 KB Output isn't correct
9 Incorrect 1093 ms 5420 KB Output isn't correct
10 Incorrect 763 ms 5420 KB Output isn't correct
11 Incorrect 856 ms 5420 KB Output isn't correct
12 Incorrect 1014 ms 5420 KB Output isn't correct
13 Incorrect 917 ms 5576 KB Output isn't correct