제출 #794819

#제출 시각아이디문제언어결과실행 시간메모리
794819fatemetmhr커다란 상품 (IOI17_prize)C++17
0 / 100
1 ms348 KiB
// ~ Be Name Khoda ~ // #include "prize.h" #include <bits/stdc++.h> //#pragma GCC optimize ("O3") //#pragma GCC target("avx2") //#pragma GCC optimize("unroll-loops,Ofast") using namespace std; mt19937 rng(chrono::steady_clock::now().time_since_epoch().count()); typedef long long ll; #define pb push_back #define mp make_pair #define all(x) x.begin(), x.end() #define fi first #define se second const int maxn = 1e6 + 10; const int maxn5 = 5e5 + 10; const int maxnt = 1.2e6 + 10; const int maxn3 = 1e3 + 10; const int mod = 1e9 + 7; const ll inf = 1e18; pair <int, int> ans[maxn5]; map <int, int> av; bool mark[maxn5]; int mx = 0, done = 0, dim = -1, cnt = 0, per[maxn5]; pair <int, int> assk(int id){ if(cnt > 10000) exit(0); if(!mark[id]){ vector <int> x = ask(id); cnt++; mark[id] = true; ans[id].fi = x[0]; ans[id].se = x[1]; } mx = max(mx, ans[id].fi + ans[id].se); if(ans[id].fi + ans[id].se == 0) dim = id; return ans[id]; } /* int check(int l, int r){ l = lower_bound(all(good), l) - good.begin(); r = lower_bound(all(good), r) - good.begin(); return r - l; } */ void solve(int l, int r){ if(dim != -1 || r <= l) return; int ptl = l, ptr = r - 1; av.clear(); int lq = -1, rq = -1; while(ptl < ptr && dim == -1){ assk(ptl); assk(ptr); av[ans[ptl].fi + ans[ptl].se] = ptl; if(av.find(ans[ptr].fi + ans[ptr].se) != av.end()){ lq = av[ans[ptr].fi + ans[ptr].se]; rq = ptr; break; } ptl++; ptr--; } if(lq == -1) return; if(ans[rq].fi - ans[lq].fi){ int mid = (lq + rq) >> 1; if(rng() % 2){ solve(lq + 1, mid); solve(mid, rq); } else{ solve(mid, rq); solve(lq + 1, mid); } } return; } int find_best(int n){ //* //*/ //mx = 1; solve(0, n); //assert(dim != -1); //cout << cnt << endl; return dim; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...