제출 #1284678

#제출 시각아이디문제언어결과실행 시간메모리
1284678mariaclara커다란 상품 (IOI17_prize)C++17
큐에 대기중
0 ms0 KiB
#include "prize.h" #include<bits/stdc++.h> using namespace std; typedef long long ll; typedef pair<int,int> pii; typedef vector<int> vi; #define all(x) x.begin(), x.end() #define sz(x) (int)x.size() #define mk make_pair #define pb push_back #define fr first #define sc second int max_loli; int query(int l, int r, int pl, int pr) { int ml = (l+r)/2 - 1, mr = ml + 1, pml = -1, pmr = -1; while(mr <= r) { vi rsp = ask(mr); if(rsp[0] + rsp[1] == max_loli) { pml = rsp[0] - (mr - ml - 1); pmr = rsp[0]; mr++; break; } if(rsp[0] + rsp[1] == 0) return mr; mr++; } int ret = -1; if(pl < pml and l <= ml) ret = query(l, ml, pl, pml); if(pmr < pr and mr <= r and ret == -1) ret = query(mr, r, pmr, pr); return ret; } int find_best(int N) { int i = 0, qtd = 0; for(; i*i < N; i++) { vi rsp = ask(i); if(rsp[0] + rsp[1] > max_loli){ max_loli = rsp[0] + rsp[1]; qtd = i; } if(rsp[0] + rsp[1] < max_loli) qtd++; if(rsp[0] + rsp[1] == 0) return i; } return query(i, N-1, qtd, max_loli); }