Submission #790705

#TimeUsernameProblemLanguageResultExecution timeMemory
790705ttamxThe Big Prize (IOI17_prize)C++14
20 / 100
3043 ms11616 KiB
#include "prize.h" #include<bits/stdc++.h> using namespace std; const int N=2e5+5; struct fenwick{ int t[N]; void add(int i,int v){ while(i<N)t[i]+=v,i+=i&-i; } int read(int 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),mem2(N); int mx; vector<int> vec; vector<int> ask2(int x){ if(mem[x].empty()){ assert(++cnt<=1e4); mem[x]=mem2[x]=ask(x); } return mem[x]; } int bsearch(){ int l=0,r=vec.size()-1; bool left=false; while(l<r){ int mid=(l+r)/2; int m=vec[mid]; ask2(m); auto &res=mem2[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*i<=n;i++){ auto res=ask2(i); mx=max(mx,res[0]+res[1]); } for(int i=0;i<n;i++)vec.emplace_back(i); 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 bsearch()':
prize.cpp:37:7: warning: unused variable 'left' [-Wunused-variable]
   37 |  bool left=false;
      |       ^~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...