Submission #1163397

#TimeUsernameProblemLanguageResultExecution timeMemory
1163397MrDogMeat커다란 상품 (IOI17_prize)C++20
97.39 / 100
15 ms5256 KiB
#include<bits/stdc++.h>
using namespace std;

std::vector<int> ask(int i);

const int MAXN = 2e5;

int Ans = -1;

vector<int> A[MAXN];

int Max;

vector<int> ASK(int x) {
    if(!A[x].size()) A[x] = ask(x);
    if(A[x][0] + A[x][1] == 0) Ans = x;
    return A[x];
}

int sumA(int x) {
    ASK(x);
    return A[x][0] + A[x][1];
}

void solve(int l, int r) {
    if(l >= r || Ans != -1) return;
    int mid = (l + r) / 2, ml = mid, mr = mid;
    while(sumA(ml) < Max) ml--;
    while(sumA(mr) < Max) mr++;
    if(A[ml][0] - A[l][0] > 0) solve(l, ml);
    if(A[r][0] - A[mr][0] > 0) solve(mr, r);
}

int find_best(int n) {
    for(int i = 0; i < 500; i++) ask(0);
    for(int i = 0; i < min(500, n); i++) {
        Max = max(Max, sumA(i));
        if(Max > 30) break;
    }
    int l = 0, r = n - 1;
    while(sumA(l) < Max) l++;
    while(sumA(r) < Max) r--;
    solve(l, r);
    return Ans;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...