Submission #282598

#TimeUsernameProblemLanguageResultExecution timeMemory
282598youssefbou62Jousting tournament (IOI12_tournament)C++14
49 / 100
178 ms1408 KiB
#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] , jump[MAXN],best[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 ; 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 ; 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] > e && in[j]!=last)new_index ++ ; if( in[j] > e ) last=in[j],in[j] = new_index ; } queries.pb({L,Rx}); } int ans=-1,pos; for(int i = N-1 ; i != -1 ; i-- ){ v[i] = R; for(int j = 0 ; j < N ; j++ ){ jump[j]=j+1 , best[j] = v[j]; } int cur_ans = 0 ; // cout << "chosed " <<i<< endl; for(int j = 0 ; j < C ; j++ ){ int l = queries[j].fi , r = queries[j].se; int cur_best =-1; for(int k = l ; k <=r ; k=jump[k]){ cur_best = max(cur_best,best[k]); } // cout << j << " " << cur_best<<endl; best[l]=cur_best ; jump[l] = r + 1 ; if( cur_best == R)cur_ans ++ ; } if( cur_ans >= ans ){ pos = i ; ans = cur_ans ; } if( i ) v[i] = v[i-1] ; } 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 (stderr)

tournament.cpp: In function 'int GetBestPosition(int, int, int, int*, int*, int*)':
tournament.cpp:133:11: warning: 'pos' may be used uninitialized in this function [-Wmaybe-uninitialized]
  133 |    return pos;
      |           ^~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...