Submission #110732

# Submission time Handle Problem Language Result Execution time Memory
110732 2019-05-12T07:06:04 Z ckodser Cake (CEOI14_cake) C++14
0 / 100
2000 ms 2828 KB
#include<bits/stdc++.h>

#define ll long long
#define pb push_back
#define mp make_pair
#define ld long double
#define F first
#define S second
#define pii pair<ll,ll> 

using namespace :: std;

const ll mod=1e9+7;
const ll maxn=3e5+500;
const ll inf=1e17+900;
const ll sq=13;


ll p[maxn];
/*
ll seg[4*maxn];

void bild(ll L,ll R,ll node){
    if(L+1==R){
	seg[node]=p[L];
	return ;
    }
    ll mid=(L+R)/2;
    bild(L,mid,2*node);
    bild(mid,R,2*node+1);
    seg[node]=max(seg[2*node+1],seg[2*node]);
}
ll find_first_high_min(ll L,ll R,ll node,ll l,ll r,ll v){
    if(r<=L || R<=l || seg[node]<=v){
	return inf;
    }
    if(L+1==R){
	return L;
    }
    ll mid=(L+R)/2;
    ll e1=find_first_high_min(L,mid,2*node,l,r,v);
    if(e1!=inf)return e1;
    return find_first_high_min(mid,R,2*node+1,l,r,v);
}
ll find_first_high_max(ll L,ll R,ll node,ll l,ll r,ll v){
    if(r<=L || R<=l || seg[node]<=v){
	return inf;
    }
    if(L+1==R){
	return L;
    }
    ll mid=(L+R)/2;
    ll e1=find_first_high_max(mid,R,2*node+1,l,r,v);
    if(e1!=inf)return e1;
    return find_first_high_max(L,mid,2*node,l,r,v);
}
ll find_seg_max(ll L,ll R,ll node,ll l,ll r){
    if(r<=L || R<=l){
	return 0;
    }
    if(l<=L && R<=r){
	return  seg[node];
    }
    ll mid=(L+R)/2;
    return max(find_seg_max(L,mid,2*node,l,r),find_seg_max(mid,R,2*node+1,l,r));
}
void update_seg(ll L,ll R,ll node,ll x,ll v){
    if(L+1==R){
	seg[node]=v;
	return;
    }
    ll mid=(L+R)/2;
    if(x<mid){
	update_seg(L,mid,2*node,x,v);
    }else{
	update_seg(mid,R,2*node+1,x,v);
    }
    seg[node]=max(seg[2*node+1],seg[2*node]);
}


*/
ll n,a;
vector<pii> best;
ll find_max(ll e){
    
    ll l,r;
    if(e<a){
	l=e;
	r=a;
    }else{
	l=a+1;
	r=e+1;
    }
    ll anss=0;
    for(ll i=l;i<r;i++){
	anss=max(anss,p[i]);
    }
    return anss;
/*




    ll ans=find_seg_max(0,n+5,1,l,r);
    for(auto e:best){
	if(l<=e.S && e.S<r){
	    ans=max(ans,e.F);
	}
    }
    return ans;*/
}
ll find_first_high(ll x,ll f){
    for(ll i=a+f;;i+=f){
	if(p[i]>x)return i;
    }
    exit(1);

/*

    if(f==1){
	ll ans=find_first_high_min(0,n+5,1,a+1,n+5,x);
	for(auto e:best){
	    if(e.F>x && e.S>a){
		ans=min(ans,e.S);
	    }
	}
	return ans;
    }else{
	ll ans=find_first_high_max(0,n+5,1,0,a,x);
	for(auto e:best){
	    if(e.F>x && e.S<a){
		ans=max(ans,e.S);
	    }
	}
	return ans;
    }*/
}/*
void fixed(ll x,ll v){
    update_seg(0,n+5,1,x,v);
}*/
void update(ll pos,ll v){
    p[pos]=best[best.size()-v].F+1;
    bool bod=0;
    for(ll i=best.size()-v+1;i<best.size();i++){
	if(best[i].S!=pos){
	    p[best[i].S]++;
	    best[i].F++;
	}else{
	    bod=1;
	    best[i].F=p[pos];
	}
    }
    if(!bod){
	best.pb(mp(p[pos],pos));
    }
    sort(best.begin(),best.end());
    if(best.size()>sq){
	reverse(best.begin(),best.end());
	pii e=best.back();
//	fixed(e.S,e.F);
	best.pop_back();
	reverse(best.begin(),best.end());
    }
}
int main(){
    ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0);
    cin>>n>>a;
    p[0]=inf;
    p[n+1]=inf;
    for(ll i=1;i<=n;i++){
	cin>>p[i];
	if(p[i]>n-sq){
	    best.pb(mp(p[i],i));
	}
    }	
   // bild(0,n+5,1);
    sort(best.begin(),best.end());
    ll q;
    cin>>q;
    for(ll i=0;i<q;i++){
	char c;
	cin>>c;
	if(c=='F'){
	    ll e;
	    cin>>e;
	    ll mi=find_max(e);
	    ll o;
	    if(e==a){
		cout<<0<<endl;
		continue;
	    }	
	    if(e<a){
		o=find_first_high(mi,1);
	    }else{
		o=find_first_high(mi,-1);
	    }
	    cout<<abs(o-e)-1<<endl;
	}else{
	    ll p,v;
	    cin>>p>>v;
	    update(p,v);
	}
    }

}

Compilation message

cake.cpp: In function 'void update(long long int, long long int)':
cake.cpp:145:31: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
     for(ll i=best.size()-v+1;i<best.size();i++){
                              ~^~~~~~~~~~~~
cake.cpp:160:6: warning: variable 'e' set but not used [-Wunused-but-set-variable]
  pii e=best.back();
      ^
# Verdict Execution time Memory Grader output
1 Correct 2 ms 384 KB Output is correct
2 Incorrect 3 ms 384 KB Output isn't correct
3 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Incorrect 129 ms 384 KB Output isn't correct
2 Correct 126 ms 384 KB Output is correct
3 Correct 131 ms 384 KB Output is correct
4 Correct 139 ms 384 KB Output is correct
5 Incorrect 184 ms 512 KB Output isn't correct
6 Incorrect 156 ms 640 KB Output isn't correct
7 Correct 176 ms 512 KB Output is correct
8 Correct 134 ms 512 KB Output is correct
# Verdict Execution time Memory Grader output
1 Execution timed out 2094 ms 1628 KB Time limit exceeded
2 Execution timed out 2017 ms 1768 KB Time limit exceeded
3 Correct 1600 ms 1912 KB Output is correct
4 Incorrect 2 ms 384 KB Output isn't correct
5 Execution timed out 2053 ms 2552 KB Time limit exceeded
6 Execution timed out 2009 ms 2684 KB Time limit exceeded
7 Execution timed out 2032 ms 2828 KB Time limit exceeded
# Verdict Execution time Memory Grader output
1 Incorrect 66 ms 516 KB Output isn't correct
2 Correct 92 ms 616 KB Output is correct
3 Correct 709 ms 1016 KB Output is correct
4 Incorrect 746 ms 1020 KB Output isn't correct
5 Incorrect 195 ms 764 KB Output isn't correct
6 Correct 1833 ms 1400 KB Output is correct
7 Correct 622 ms 1016 KB Output is correct
8 Correct 130 ms 1152 KB Output is correct
9 Execution timed out 2050 ms 2680 KB Time limit exceeded
10 Incorrect 681 ms 1528 KB Output isn't correct
11 Execution timed out 2052 ms 2076 KB Time limit exceeded
12 Execution timed out 2037 ms 2332 KB Time limit exceeded
13 Execution timed out 2043 ms 2696 KB Time limit exceeded