Submission #26330

# Submission time Handle Problem Language Result Execution time Memory
26330 2017-06-29T08:22:35 Z Kerim Cake (CEOI14_cake) C++14
0 / 100
2000 ms 29328 KB
#include "bits/stdc++.h"
#include<ext/pb_ds/assoc_container.hpp>
#define MAXN 500009
#define INF 1000000007
#define mp(x,y) make_pair(x,y)
#define all(v) v.begin(),v.end()
#define pb(x) push_back(x)
#define wr cout<<"----------------"<<endl;
#define ppb() pop_back()
#define tr(ii,c) for(__typeof((c).begin()) ii=(c).begin();ii!=(c).end();ii++)
#define ff first
#define ss second
#define my_little_dodge 46
#define debug(x)  cerr<< #x <<" = "<< x<<endl;
#define left cep
#define right sag
using namespace std;
using namespace __gnu_pbds;

typedef long long ll;
typedef pair<int,int> PII;
typedef tree<PII, null_type, less<PII>, rb_tree_tag, tree_order_statistics_node_update> tes;
template<class T>bool umin(T& a,T b){if(a>b){a=b;return 1;}return 0;}
template<class T>bool umax(T& a,T b){if(a<b){a=b;return 1;}return 0;}
int n,a,arr[MAXN],p[MAXN],s[MAXN<<2];
tes st;
void update(int p,int v,int nd,int x,int y){
	if(x==y){
		s[nd]=v;
		return;
	}
	int mid=(x+y)>>1;
	if(p<=mid)
		update(p,v,nd<<1,x,mid);
	else	
		update(p,v,nd<<1|1,mid+1,y);
	s[nd]=min(s[nd<<1],s[nd<<1|1]);
}
int tap(int l,int r,int nd,int x,int y){
	if(l>y or x>r)
		return INF;
	if(l<=x and y<=r)
		return s[nd];
	int mid=(x+y)>>1;	
	return min(tap(l,r,nd<<1,x,mid),tap(l,r,nd<<1|1,mid+1,y));	
}
int left(int l,int r,int v,int nd,int x,int y){
	if(l>y or x>r or s[nd]>v)
		return -1;
	if(x==y)
		return x;
	int mid=(x+y)>>1;
	int ii=left(l,r,v,nd<<1,x,mid);
	if(~ii)
		return ii;
	return left(l,r,v,nd<<1|1,mid+1,y);	
}
int right(int l,int r,int v,int nd,int x,int y){
	if(l>y or x>r or s[nd]>v)
		return -1;
	if(x==y)
		return x;
	int mid=(x+y)>>1;
	int ii=right(l,r,v,nd<<1|1,mid+1,y);
	if(~ii)
		return ii;
	return right(l,r,v,nd<<1,x,mid);	
}
void upd(int p,int x){
	st.erase(mp(arr[p],p));
	arr[p]=x;update(p,x,1,1,n);
	st.insert(mp(x,p));
}
int main(){
	//~ #ifndef ONLINE_JUDGE
    //~ freopen("file.in", "r", stdin);
    //~ freopen("file.out", "w", stdout);
	//~ #endif
	scanf("%d%d",&n,&a);
	int l=min(10,n);
	for(int i=1;i<=n;i++){
		int x;
		scanf("%d",&x);
		p[n-x+1]=i;arr[i]=n-x+1;
		st.insert(mp(n-x+1,i));update(i,n-x+1,1,1,n);
	}
	int q;
	scanf("%d",&q);
	while(q--){
		char c;
		scanf(" %c",&c);
		if(c=='F'){
			int x;
			scanf("%d",&x);
			if(x==a){
				puts("0");
				continue;
			}
			if(x<a){
				int mx=tap(x,a-1,1,1,n);
				int pos=left(a+1,n,mx,1,1,n);
				if(pos==-1)
					printf("%d\n",n-x);
				else
					printf("%d\n",pos-x-1);
			}
			else{
				int mx=tap(a+1,x,1,1,n);
				int pos=right(1,a-1,mx,1,1,n);
				if(pos==-1)
					printf("%d\n",x-1);	
				else
					printf("%d\n",x-pos-1);
			}
		}
		else{
			int x,y;
			scanf("%d%d",&x,&y);
			int rank=st.order_of_key(mp(arr[x],-1))+1;
			if(rank==y)
				continue;	
			if(y<rank){
				int val=arr[p[y]];
				upd(x,--val);
				for(int i=y-1;i>=1;i--)
					upd(p[i],--val);
				for(int i=l;i>y;i--)
					p[i]=p[i-1];
				p[y]=x;	
			}	
			else{
				int val=arr[p[y]];
				assert(p[rank]==x);
				for(int i=rank;i<y;i++)
					p[i]=p[i+1];
				p[y]=x;	
				for(int i=y;i>=rank;i--)
					upd(p[i],val--);
			}
		}
	}
	return 0;
}

Compilation message

cake.cpp: In function 'int main()':
cake.cpp:79:21: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
  scanf("%d%d",&n,&a);
                     ^
cake.cpp:83:17: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
   scanf("%d",&x);
                 ^
cake.cpp:88:16: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
  scanf("%d",&q);
                ^
cake.cpp:91:18: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
   scanf(" %c",&c);
                  ^
cake.cpp:94:18: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
    scanf("%d",&x);
                  ^
cake.cpp:118:23: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
    scanf("%d%d",&x,&y);
                       ^
# Verdict Execution time Memory Grader output
1 Correct 0 ms 13748 KB Output is correct
2 Incorrect 0 ms 13748 KB Output isn't correct
3 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Runtime error 6 ms 14280 KB Execution killed because of forbidden syscall gettid (186)
2 Correct 666 ms 14408 KB Output is correct
3 Correct 766 ms 14408 KB Output is correct
4 Correct 613 ms 14408 KB Output is correct
5 Runtime error 16 ms 15336 KB Execution killed because of forbidden syscall gettid (186)
6 Runtime error 36 ms 15336 KB Execution killed because of forbidden syscall gettid (186)
7 Correct 936 ms 15332 KB Output is correct
8 Correct 819 ms 15332 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 233 ms 19952 KB Output is correct
2 Correct 196 ms 19952 KB Output is correct
3 Correct 163 ms 19952 KB Output is correct
4 Incorrect 0 ms 13748 KB Output isn't correct
5 Correct 419 ms 29324 KB Output is correct
6 Incorrect 489 ms 29324 KB Output isn't correct
7 Correct 363 ms 29324 KB Output is correct
# Verdict Execution time Memory Grader output
1 Incorrect 103 ms 14012 KB Output isn't correct
2 Correct 69 ms 14012 KB Output is correct
3 Correct 199 ms 16916 KB Output is correct
4 Correct 276 ms 16916 KB Output is correct
5 Incorrect 293 ms 13880 KB Output isn't correct
6 Correct 396 ms 17840 KB Output is correct
7 Correct 283 ms 14408 KB Output is correct
8 Correct 583 ms 19952 KB Output is correct
9 Execution timed out 2000 ms 29324 KB Execution timed out
10 Incorrect 903 ms 13880 KB Output isn't correct
11 Correct 1389 ms 15068 KB Output is correct
12 Execution timed out 2000 ms 26288 KB Execution timed out
13 Runtime error 299 ms 29328 KB Execution killed because of forbidden syscall gettid (186)