Submission #619983

#TimeUsernameProblemLanguageResultExecution timeMemory
619983OzyThe Big Prize (IOI17_prize)C++17
100 / 100
48 ms2060 KiB
#include "prize.h" #include <bits/stdc++.h> using namespace std; #define lli int #define rep(i,a,b) for (int i = (a); i <= (b); i++) #define repa(i,a,b) for (int i = (a); i >= (b); i--) #define debug(a) cout << #a << " = " << a << endl #define debugsl(a) cout << #a << " = " << a << ", " #define ini first #define fin second #define MAX 200000 lli mitad,cont,g; queue<pair<lli,lli> > cola; pair<lli,lli> act; map<lli,lli> existe,id; set<lli> pos[10]; set<lli>::iterator l,r; lli premios[MAX+2][2]; bool nosepuede; vector<int> a; int find_best(int n) { cont = 0; cola.push({0,n-1}); premios[n][0] = n+1; while (!cola.empty()) { act = cola.front(); cola.pop(); if (act.ini > act.fin) continue; mitad = (act.ini + act.fin)/2; //si puede haber algo dentro de mi nosepuede=false; rep(i,0,cont-1) { l = pos[i].lower_bound(mitad); r = l; l--; if ((*l) == -1) { if (premios[*r][0] == 0) {nosepuede=true; break;} } else if (premios[*l][1] == premios[*r][1] || premios[*l][1] == premios[*r][1]) {nosepuede=true; break;} } if (nosepuede) continue; a = ask(mitad); g = a[0]+a[1]; if (g == 0) return mitad; existe[g]++; if (existe[g] == 1) { id[g] = cont; pos[cont].insert(-1); pos[cont].insert(n); cont++; } pos[id[g]].insert(mitad); premios[mitad][0] = a[0]; premios[mitad][1] = a[1]; cola.push({act.ini,mitad-1}); cola.push({mitad+1,act.fin}); } }

Compilation message (stderr)

prize.cpp: In function 'int find_best(int)':
prize.cpp:72:1: warning: control reaches end of non-void function [-Wreturn-type]
   72 | }
      | ^
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...