Submission #282553

# Submission time Handle Problem Language Result Execution time Memory
282553 2020-08-24T14:51:52 Z youssefbou62 Jousting tournament (IOI12_tournament) C++14
0 / 100
18 ms 1312 KB
#include  <bits/stdc++.h>
using namespace std;

// using namespace __gnu_pbds;
#pragma GCC optimize("Ofast")
#pragma GCC optimize ("unroll-loops")
#pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,tune=native")

#define mp make_pair
#define fi first
#define se second
#define all(v) v.begin(),v.end()
#define allarr(a) a , a + n
#define ll long long
#define ull unsigned long long 
#define pb push_back
#define fastio ios_base::sync_with_stdio(false) ; cin.tie(NULL); cout.tie(NULL)
#define sz(x)  (int)x.size() 
typedef pair<int, int> pi;
typedef pair<ll,ll> pll; 
typedef pair<int,pi> trp ;
typedef vector<pi> vpi;
typedef vector<pll> vpll ;
// int ab  (int  x ) { return (x>0?x:-x); }
//typedef tree<int,null_type,less<int>,rb_tree_tag,tree_order_statistics_node_update> ordered_set;
const int MAXN = 5005 ; 

int in[MAXN] ; 
int st[MAXN*2]; 
int v[MAXN]; 
void init(int n){
	for(int i = 0 ; i< n ;i++ )
		in[i] = i ;

}

// int left(int u){return u*2+1;}
// int right(int u){return u*2+2;}

// void build (int i,int j,int in,int u){

// 	if( i > j )return ; 
// 	if( i == j ){

// 		st[u] = v[in]; 
// 		return ; 
// 	}
// 	int mid = (i+j)/2; 
// 	if( in <= mid )
// 	build(i,mid,in,left(u)); 
// 	else 
// 	build(mid+1,j,in,right(u)); 
	
// 	st[u] = max(st[left(u)],st[right(u)]); 
// }



// int query(int i,int j,int qL ,int qR,int u){
// 	// if( qL == 1 && qR == 3 )cout << i << " " << j << " " << u << endl; 
// 	if( i > j || i > qR || j < qL ) return -1; 
// 	if( i >= qL && j <= qR )return st[u] ; 

// 	int mid = ( i + j )/2; 
// 	return max(query(i,mid,qL,qR,left(u)) , 
// 		query(mid+1,j,qL,qR,right(u))); 

// }

int GetBestPosition(int N, int C, int R, int *K, int *S, int *E) {
	init(N); 
	
	vpi queries ;
	vector<int> best; 
	for(int i = 0 ; i < N-1 ; i++ )v[i] = K[i] ; 
	for(int i = 0 ; i < C ; i++ ){
		int s = S[i] , e = E[i] ;
		int new_index = s ; 
		int L = 1e9 , Rx = -1 ; 
		int last = -1 ; int A=-1; 
		for(int j = 0 ; j < N ; j++ ){
			if( in[j] >= s && in[j] <= e){
				 
				last = in[j] ; 
				in[j] = new_index;
				L = min(L,j); 
				Rx = max(Rx,j); 
			}
			if( in[j] > s && in[j]<e){
				A = max(A,v[j]); 
			}
			if( in[j] > e && in[j]!=last)new_index ++ ; 
			if( in[j] > e )
				last=in[j],in[j] = new_index ;  

		}
		best.pb(A); 
		queries.pb({L,Rx}); 

	}
	
	int ans=-1,pos; 
		// build(0,N-1,i,0) ; 
	for(int i = N-1 ; i != -1 ; i-- ){
		

		v[i] = R;  
		// build(0,N-1,i,0);
		int cur_ans = 0 ;
		// cout << "chosed "  <<i<< endl; 
		for(int j = 0 ; j < C ; j++ ){

			int cur_best = max({v[queries[j].fi],v[queries[j].se],best[i]}); 
			if( i >= queries[j].fi && i <= queries[j].se)cur_best = max(cur_best,R); 
			if( cur_best == R)cur_ans ++ ; 
			// cout << j << " j " << cur_best << endl; 
		}
		if( cur_ans >= ans ){
			pos = i ;
			ans = cur_ans ; 
		}
		if( i )
		v[i] = v[i-1] ; //, build(0,N-1,i,0); 
		// cout << i << " " << cur_ans << endl; 
	}
	assert(ans!=-1); 
  	return pos;

}




// #define inbuf_len 1 << 16
// #define outbuf_len 1 << 16

// int GetBestPosition(int N, int C, int R, int *K, int *S, int *E);

// int main() {
//   int tmp;

//   /* Set input and output buffering */
//   char *inbuf, *outbuf;
//   inbuf = (char*) malloc(inbuf_len * sizeof(char));
//   outbuf = (char*) malloc(outbuf_len * sizeof(char));
//   tmp = setvbuf(stdin, inbuf, _IOFBF, inbuf_len);
//   assert(tmp == 0);
//   tmp = setvbuf(stdout, outbuf, _IOFBF, outbuf_len);
//   assert(tmp == 0);

//   int N, C, R;
//   int *K, *S, *E;
//   tmp = scanf("%d %d %d", &N, &C, &R);
//   assert(tmp == 3);
//   K = (int*) malloc((N-1) * sizeof(int));
//   S = (int*) malloc(C * sizeof(int));
//   E = (int*) malloc(C * sizeof(int));
//   int i;
//   for (i = 0; i < N-1; i++) {
//     tmp = scanf("%d", &K[i]);
//     assert(tmp == 1);
//   }
//   for (i = 0; i < C; i++) {
//     tmp = scanf("%d %d", &S[i], &E[i]);
//     assert(tmp == 2);
//   }

//   printf("%d\n", GetBestPosition(N, C, R, K, S, E));

//   return 0;

// }

Compilation message

tournament.cpp: In function 'int GetBestPosition(int, int, int, int*, int*, int*)':
tournament.cpp:127:11: warning: 'pos' may be used uninitialized in this function [-Wmaybe-uninitialized]
  127 |    return pos;
      |           ^~~
# Verdict Execution time Memory Grader output
1 Incorrect 0 ms 256 KB Output isn't correct
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Incorrect 4 ms 384 KB Output isn't correct
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Runtime error 18 ms 1312 KB Execution killed with signal 11
2 Halted 0 ms 0 KB -