Submission #227463

#TimeUsernameProblemLanguageResultExecution timeMemory
227463PedroBigManThe Big Prize (IOI17_prize)C++14
90 / 100
109 ms2676 KiB
#include <iostream>
#include <vector>
#include <cmath>
#include <algorithm>
#include <string>
#include <map>
#include <unordered_map>
#include <set>
#include <unordered_set>
#include <queue>
#include <deque>
#include <list>
#include "prize.h"
using namespace std;
typedef int ll;
typedef unsigned long long int ull;
typedef long double ld;
#define REP(i,a,b) for(ll i=(ll)a; i<(ll)b; i++)
#define pb push_back
#define mp make_pair
#define pl pair<ll,ll>
#define ff first
#define ss second
#define whole(x) x.begin(),x.end()
#define DEBUG(i) cout<<"Pedro Is The Master "<<i<<endl
#define INF 1000000000000LL
ll insig;
#define In(vecBRO, LENBRO) REP(IBRO,0,LENBRO) {cin>>insig; vecBRO.pb(insig);}
void Out(vector<ll> x) {REP(i,0,x.size()) {cout<<x[i]<<" ";} cout<<endl;}

int find_best(int n) 
{
	ll N=(ll) n;
    vector<pl> query; REP(i,0,N) {query.pb(mp(-1,-1));}
    vector<ll> spe;
    ll n_spe=0LL;
    REP(i,0,min(500,N)) 
    {
        vector<int> q=ask(i); query[i]=mp(q[0],q[1]);
        n_spe=max(n_spe,q[0]+q[1]);
    }
    REP(i,0,min(500,N))
    {
        if(query[i].ff+query[i].ss!=n_spe) {spe.pb(i);}
    }
    while((ll) spe.size()!=n_spe)
    {
        ll lo=0LL;
        if(spe.size()>0) {lo=spe[spe.size()-1]+1;} 
        ll hi=N-1;
        while(lo<hi)
        {
            ll mid=(lo+hi)/2LL;
            if(query[mid].ff==-1) {vector<int> q=ask(mid); query[mid]=mp(q[0],q[1]);}
            if(query[mid].ff+query[mid].ss!=n_spe) {hi=mid; continue;}
            if(query[mid].ff>spe.size()) {hi=mid-1;}
            else {lo=mid+1;}
        }
        spe.pb(lo);
    }
    REP(i,0,spe.size()) 
    {
        ll ind=spe[i];
        if(query[ind].ff==-1) {vector<int> q=ask(ind); query[ind]=mp(q[0],q[1]);}
        if(query[ind].ff==0 && query[ind].ss==0) {return ind;}
    }
    return 0LL;
}

Compilation message (stderr)

prize.cpp: In function 'int find_best(int)':
prize.cpp:56:29: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
             if(query[mid].ff>spe.size()) {hi=mid-1;}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...