Submission #790732

#TimeUsernameProblemLanguageResultExecution timeMemory
790732ttamxThe Big Prize (IOI17_prize)C++14
0 / 100
130 ms12276 KiB
#include "prize.h" #include<bits/stdc++.h> using namespace std; mt19937 rng(time(nullptr)); const int N=2e5+5; struct fenwick{ int t[N]; void add(int i,int v){ i++; while(i<N)t[i]+=v,i+=i&-i; } int read(int i){ i++; int res=0; while(i>0)res+=t[i],i-=i&-i; return res; } }f; int cnt=0; int n; int ans=-1; vector<vector<int>> mem(N); int mx; vector<int> vec; vector<int> ask2(int x){ if(mem[x].empty()){ assert(++cnt<=1e4); mem[x]=ask(x); } return mem[x]; } int bsearch(){ int l=0,r=vec.size()-1; while(l<r){ int mid=(l+r)/2; int m=vec[mid]; auto res=ask2(m); int val=res[0]+res[1]; if(val<mx)return m; if(res[0]-f.read(m-1)){ r=mid-1; }else{ l=mid+1; } } return vec[l]; } int find_best(int _n) { n=_n; for(int i=0;i<n;i++)vec.emplace_back(i); int idx=0; for(int i=0;i*i<n;i++){ int x=i; auto res=ask2(x); if(res[0]+res[1]==0)return x; f.add(x,1); vec.erase(lower_bound(vec.begin(),vec.end(),x)); } while(ans==-1){ int x=bsearch(); auto res=ask2(x); if(res[0]+res[1]==0)return x; f.add(x,1); vec.erase(lower_bound(vec.begin(),vec.end(),x)); } return ans; }

Compilation message (stderr)

prize.cpp: In function 'int find_best(int)':
prize.cpp:59:6: warning: unused variable 'idx' [-Wunused-variable]
   59 |  int idx=0;
      |      ^~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...