Submission #824859

#TimeUsernameProblemLanguageResultExecution timeMemory
824859LucaIlieMinerals (JOI19_minerals)C++17
40 / 100
24 ms2892 KiB
#include "minerals.h" #include <bits/stdc++.h> using namespace std; const int MAX_N = 43000; const int UNDEF = -1; int pairr[2 * MAX_N + 1], perm[2 * MAX_N + 1]; bool isFirst[2 * MAX_N + 1]; int ans = 0; void solve( vector <int> &v, bool active ) { int n = v.size() / 2, ln = n / 2; vector<int> left, right; /*printf( "%d %d: ", n, active ); for ( int i: v ) printf( "%d ", perm[i] ); printf( "\n" );*/ if ( n == 1 ) { pairr[v[0]] = v[1]; pairr[v[1]] = v[0]; return; } int pairs = 0; for ( int i: v ) { if ( isFirst[i] ) { if ( pairs == ln ) { right.push_back( i ); ans = Query( perm[i] ); } else { left.push_back( i ); pairs++; } } else { if ( pairs == ln ) { int prevAns = ans; ans = Query( perm[i] ); if ( (!active && ans > prevAns) || (active && ans == prevAns) ) { ans = Query( perm[i] ); left.push_back( i ); } else right.push_back( i ); } else left.push_back( i ); } } solve( left, active ); solve( right, !active ); } void Solve( int n ) { vector<int> v; for ( int i = 1; i <= 2 * n; i++ ) { pairr[i] = UNDEF; v.push_back( i ); perm[i] = i; } random_shuffle( perm + 1, perm + 1 + 2 * n ); int prevAns = 0; for ( int i = 1; i <= 2 * n; i++ ) { ans = Query( perm[i] ); isFirst[i] = (ans > prevAns); //printf( "%d\n", isFirst[i] ); prevAns = ans; } solve( v, true ); for ( int i = 1; i <= 2 * n; i++ ) { if ( pairr[i] < i ) Answer( perm[i], perm[pairr[i]] ); } }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...