제출 #850806

#제출 시각아이디문제언어결과실행 시간메모리
85080612345678커다란 상품 (IOI17_prize)C++17
0 / 100
2 ms5208 KiB
#include "prize.h" #include <bits/stdc++.h> using namespace std; const int nx=2e5+5; int w, N, ans, mx,cnt; vector<int> m[nx]; vector<int> ask2(int x) { if (x<0||x==mx) return vector<int> (2, 0); if (m[x].empty()) { m[x]=ask(x); if (m[x][0]+m[x][1]==0) ans=x; return m[x]; } return m[x]; } void solve(int l, int r) { if (l==r) return ask2(l), void(); //if (cnt++>=10) return; int ml=(l+r)/2, mr=(l+r)/2; while (ml>=l&&ask2(ml)[0]+ask2(ml)[1]!=w) ml--; while (mr<=r&&ask2(mr)[0]+ask2(mr)[1]!=w) mr++; //cout<<l<<' '<<r<<' '<<ml<<' '<<mr<<'\n'; if (ask2(ml)[0]-ask2(l-1)[0]>0) solve(l, ml); if (r-l!=1) if (ask2(mr)[1]-ask2(r+1)[1]>0) solve(mr, r); } int find_best(int n) { mx=n; for (int i=0; i<min(n-1, 100); i++) w=max(w, ask2(i)[0]+ask2(i)[1]); solve(0, n-1); return ans; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...