Submission #43417

# Submission time Handle Problem Language Result Execution time Memory
43417 2018-03-15T22:21:56 Z Hassoony Cake (CEOI14_cake) C++14
0 / 100
1002 ms 62132 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);
            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]);
            }
            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);
        }
        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: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:87: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 1 ms 248 KB Output isn't correct
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Incorrect 454 ms 5112 KB Output isn't correct
2 Incorrect 302 ms 9136 KB Output isn't correct
3 Incorrect 328 ms 13524 KB Output isn't correct
4 Correct 228 ms 13580 KB Output is correct
5 Incorrect 512 ms 18104 KB Output isn't correct
6 Incorrect 398 ms 22844 KB Output isn't correct
7 Incorrect 380 ms 27212 KB Output isn't correct
8 Correct 251 ms 27236 KB Output is correct
# Verdict Execution time Memory Grader output
1 Incorrect 224 ms 29540 KB Output isn't correct
2 Incorrect 216 ms 29752 KB Output isn't correct
3 Incorrect 193 ms 29852 KB Output isn't correct
4 Incorrect 1 ms 29852 KB Output isn't correct
5 Incorrect 262 ms 32380 KB Output isn't correct
6 Incorrect 252 ms 32924 KB Output isn't correct
7 Incorrect 211 ms 32924 KB Output isn't correct
# Verdict Execution time Memory Grader output
1 Incorrect 75 ms 32924 KB Output isn't correct
2 Incorrect 73 ms 32924 KB Output isn't correct
3 Incorrect 119 ms 32924 KB Output isn't correct
4 Incorrect 133 ms 32924 KB Output isn't correct
5 Incorrect 226 ms 32924 KB Output isn't correct
6 Incorrect 236 ms 34032 KB Output isn't correct
7 Incorrect 286 ms 35072 KB Output isn't correct
8 Incorrect 221 ms 37540 KB Output isn't correct
9 Incorrect 972 ms 45316 KB Output isn't correct
10 Incorrect 716 ms 45496 KB Output isn't correct
11 Incorrect 827 ms 50012 KB Output isn't correct
12 Incorrect 1002 ms 57508 KB Output isn't correct
13 Incorrect 896 ms 62132 KB Output isn't correct