제출 #660314

#제출 시각아이디문제언어결과실행 시간메모리
660314urosk커다란 상품 (IOI17_prize)C++14
0 / 100
10 ms5168 KiB
#include "prize.h"
#define dbg(x) cerr<<#x<<": "<<x<<endl
#define here cerr<<"================================\n"
#include <bits/stdc++.h>
#define ll int
#define llinf 1000000000
#define pb push_back
#define sz(a) (ll)(a.size())
#define all(a) a.begin(),a.end()
#define fi first
#define sc second

using namespace std;
#define maxn 200005
vector<ll> cnt(2);
vector<ll> c[maxn];
bool ima[maxn];
ll val[maxn];
void calc(ll i){
    if(ima[i]) return;
    ima[i] = 1;
    c[i] = ask(i-1);
    val[i] = c[i][0] + c[i][1];
    return;
}
ll find_best(ll n) {
    ll d = 1;
    while(d*d<n) d++;
    d = min(3*d,n);
    ll mn = llinf,mx = 0;
    set<ll> nxt;
    for(ll i = 1;i<=d;i++){
        calc(i);
        mx = max(val[i],mx);
    }
    for(ll i = 1;i<=d;i++){
        if(val[i]!=mx) nxt.insert(i);
    }
    ll i = d;
    while(val[i]!=mx){
        i++;
        calc(i);
        if(i!=d+1) nxt.insert(i-1);
    }
    ll l = i,r = n;
    calc(r);
    while(val[r]!=mx&&r>l){
        nxt.insert(r);
        r--;
        calc(r);
    }
    ll rn = r,mid;
    while(l<rn){
        r = rn;
        calc(l);
        if(c[l][0]==c[r][0]) break;
        ll poc = c[l][0];
        l++;
        r--;
        while(l<=r){
            mid = (l+r)/2;
            calc(mid);
            bool f = 0;
            while(val[mid]!=mx&&mid>=l){
                nxt.insert(mid);
                mid--;
                calc(mid);
                f = 1;
            }
            if(c[mid][0]==poc){
                if(f) break;
                l = mid+1;
            }else r = mid-1;
        }
        auto it = nxt.end(); it--; l = *it + 1;
        while(val[l]!=mx&&l<rn){
            nxt.insert(l);
            l++;
            calc(l);
        }
    }
    ll ans = 0;
    for(ll i : nxt){
        calc(i);
        if(val[i]==0) ans = i;
    }
    return ans;
}
/*
8
3 2 3 1 3 3 2 3
*/

컴파일 시 표준 에러 (stderr) 메시지

prize.cpp: In function 'int find_best(int)':
prize.cpp:30:8: warning: unused variable 'mn' [-Wunused-variable]
   30 |     ll mn = llinf,mx = 0;
      |        ^~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...