제출 #798416

#제출 시각아이디문제언어결과실행 시간메모리
798416HaroldVemeno커다란 상품 (IOI17_prize)C++17
97.96 / 100
45 ms336 KiB
#include "prize.h"
#include <bits/stdc++.h>

using namespace std;

int ec = 0;
int n;

int sift(int l, int r, int e, int le, int re) {
    if(e <= 0) return -1;

    int m = (l+r)/2;
    int mr = m;
    vector<int> mra;
    for(mr = m; mr < r; ++mr) {
        mra = ask(mr);
        if(mra[0] + mra[1] == ec) {

            break;
        } else if(mra[0] + mra[1] == 0) {
            return mr;
        }
    }
    if(mr == r) {
        return sift(l, m, e - (r - m), le, re + (r - m));
    }
    return max(sift(l, m, mra[0] - le - (mr - m), le, (mr - m) + mra[1]),
               sift(mr+1, r, mra[1] - re, mra[0], re));
}

int find_best(int N) {
    n = N;
    srand(9399390);
	for(int i = 0; i < min(n, 460); i++) {
        int r = rand() % n;
		vector<int> res = ask(r);
        if(res[0] + res[1] == 0) return r;
	    ec = max(res[0] + res[1], ec);
        //if(1ll*ec*ec*ec*ec > n) break;
	}

    return sift(0, n, ec, 0, 0);
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...