Submission #527468

#TimeUsernameProblemLanguageResultExecution timeMemory
527468stefantagaThe Big Prize (IOI17_prize)C++14
90 / 100
67 ms328 KiB
#include "prize.h"
#include <bits/stdc++.h>
using namespace std;

int find_best(int n) {
    int Max=0,i;
    srand(time(NULL));
    for (i=0;i<50;i++)
    {
        int poz = rand()%n;
        vector <int> val = ask(poz);
        Max=max(Max,val[0]+val[1]);
    }
    for (int i = 0; i < n; ++ i ) {
        int left = i+1, right = min(n-1,i+2500);
        vector <int> val = ask(i);
        Max=max(Max,val[0]+val[1]);
        int poz_right = i;
        if (val[0] + val[1] == 0) {
            return i;
        }
        if (Max!=val[0]+val[1])
        {
            continue;
        }
        while (left <= right) {
            int mid = (left + right) / 2;

            vector <int> cnt = ask(mid);

            if (cnt[0] + cnt[1] == 0) {
                return mid;
            }

            bool Type = (cnt[0] + cnt[1] == val[0] + val[1]);

            if (Type) {
                int cate_sunt = cnt[0] - val[0];

                if (cate_sunt == 0) {
                    poz_right = mid;
                    left = mid + 1;
                }
                else right = mid - 1;
            }
            else {
                right = mid - 1;
            }
        }

        i = poz_right;
    }

    return n-1;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...