제출 #117187

#제출 시각아이디문제언어결과실행 시간메모리
117187zubec커다란 상품 (IOI17_prize)C++14
90 / 100
80 ms2180 KiB
#include "prize.h"
#include <bits/stdc++.h>
using namespace std;

pair<int, int> pr[200100];

bool used[200100];

pair<int, int> myask(int pos){
    if (used[pos]){
        return pr[pos];
    }
    used[pos] = 1;
    vector <int> vec = ask(pos);
    return pr[pos] = {vec[0], vec[1]};
}

int find_best(int n) {
    int mx = -1;
    int mxpos = 0;
    for (int i = 0; i < min(500, n); i++){
        pair<int, int> pr = myask(i);
        if (pr.first+pr.second == 0)
            return i;
        if (pr.first + pr.second > mx){
            mx = pr.first + pr.second;
            mxpos = i;
        }
    }
    int lst = mxpos;
    while(1){
        int l = lst+1, r = n;
        while(l < r){
            int mid = (l+r)>>1;
            pair<int, int> pr = myask(mid);
            if (pr.first+pr.second == 0)
                return mid;
            if (pr != myask(lst))
                r = mid; else
                l = mid+1;
        }
        lst = l;
        while(lst < n){
            if (myask(lst).first + myask(lst).second == myask(mxpos).first+myask(mxpos).second)
                break;
            if (myask(lst).first + myask(lst).second == 0)
                return lst;
            ++lst;
        }
    }
}

/**

8
3 2 3 1 3 2 3 3

*/
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...