Submission #1296863

#TimeUsernameProblemLanguageResultExecution timeMemory
1296863f3d3r커다란 상품 (IOI17_prize)C++20
20 / 100
24 ms11352 KiB
#include <bits/stdc++.h> #pragma GCC optimize("O3") #define pb push_backs using namespace std; vector<int> ask(int i); int ans = -1; int s; int N; vector<vector<int>> cache; vector<int> cask(int m) { if(m<=-1) return vector<int>(2,s); if(m>=N) return vector<int>(2,0); if(cache[m]==vector<int>(2,-1)) cache[m]=ask(m); return cache[m]; } bool chk(int l, int r) { return (cask(l-1)[1]-cask(r)[1] > 0); } void bs(int l, int r) { if(!chk(l, r)) return; //se l'intervallo è vuoto niente if (ans!=-1) return; //se ans già trovata niente int m = (l+r)/2; auto v = cask(m); //query if (v[0]+v[1]==0) {ans=m; return;} //se sol, fine if(l==r) return; // if (v[0]+v[1]<=s) {bs(l, m); bs(m+1, r); return;} s=v[0]+v[1]; if (v[0]>0) bs(l, m); if (v[1]>0) bs(m+1, r); } int find_best(int n) { cache.resize(n, vector<int>(2,-1)); N=n; // int i = 0; vector<int> k; // do{k=ask(i++);} while(k[0]+k[1]<sqrt(n) and i<425); s=sqrt(n); bs(0, n); return ans; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...