제출 #594360

#제출 시각아이디문제언어결과실행 시간메모리
594360FatihSolak커다란 상품 (IOI17_prize)C++17
20 / 100
42 ms10252 KiB
#include "prize.h" #include <bits/stdc++.h> #define N 200005 using namespace std; mt19937 rng(chrono::steady_clock::now().time_since_epoch().count()); vector<int> rem[N]; int tot_queries = 5000; vector<int> get(int x){ if(rem[x].size())return rem[x]; assert(tot_queries--); return rem[x] = ask(x); } const int block = 256; int find_best(int n){ if(n <= 5000){ for(int i = 0;i<n;i++){ if(get(i)[0] + get(i)[1] == 0){ return i; } } } // int maxi = 0; // while((long long)(n-maxi) * (n-maxi) + 1 < n){ // int point = rng()%n; // maxi = max(maxi,get(point)[0] + get(point)[1]); // } int maxi = 0; for(int iter = 0;iter<=500;iter++){ int point = rng()%n; maxi = max(maxi,get(point)[0] + get(point)[1]); } assert(maxi <= 1000); //assert((long long)(n-maxi) * (n-maxi) + 1 >= n); int p = 0; while(1){ int now = get(p)[0] + get(p)[1]; if(now != maxi){ if(now == 0){ return p; } } else{ int pos = p - get(p)[0]; int l = p,r= n-1; while(l < r){ int m = (l + r + 1)/2; int val = get(m)[0] + get(m)[1]; if(val != maxi || m - get(m)[0] != pos + (m-p)){ r = m-1; } else l = m; } p = l; } p++; } }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...