| # | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 | 
|---|---|---|---|---|---|---|---|
| 101918 | tim25871014 | 커다란 상품 (IOI17_prize) | C++17 | 0 ms | 0 KiB | 
이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include "prize.h"
using namespace std;
int find_best(int n){
    int crd[200010]={};
    int loli=0;
    for(int i=0;i<500;i++){
        vector<int> ans=ask(i);
        loli=max(loli,ans[0]+ans[1]);
    }
    int l=0;
    while(ask(l)[1]!=0){
        int ub=n+1,lb=l;
        vector<int> ans;
        while(ub-lb>1){
            int mid=ub+lb>>1;
            if(!crd[mid]) ans=ask(mid);
            while((crd[mid])?(ans=ask(mid)):,crd[mid] || ans[0]+ans[1]!=loli){
                crd[mid]=1;
                if(ans[0]+ans[1]==0) return mid;
                mid--;
            }
            if(ans[0]) ub=mid;
            else lb=mid;
        }
        ans=ask(lb);
        if(ans[0]+ans[1]==0) return lb;
        else l=lb+1;
    }
}
