Submission #860912

#TimeUsernameProblemLanguageResultExecution timeMemory
860912TahirAliyevThe Big Prize (IOI17_prize)C++17
20 / 100
59 ms16140 KiB
#include "prize.h"
#include <bits/stdc++.h>

using namespace std;

#define ll long long
#define pii pair<int, int>

const int MAX = 2e5 + 5, BLOCK = 450;

int tree[MAX];
vector<int> H[MAX];
int det = 0;

void update(int pos, int val){
    for(int i = pos; i < MAX; i += (-i & i)){
        tree[i] += val;
    }
}

int q(int l, int r){
    if(l != 1) return q(1, r) - q(1, l - 1);
    int res = 0;
    for(int i = r; i > 0; i -= (-i & i)){
        res += tree[i];
    }
    return res;
}

int find_best(int n){
    for(int i = 0; i < min(BLOCK, n); i++){
        H[i] = ask(i);
        if(H[i][0] + H[i][1] == 0) return i;
        det = max(det, H[i][0] + H[i][1]);
    }
    set<int> s;
    for(int i = 0; i < n; i++){
        s.insert(i);
    }
    for(int k = 1; k <= det; k++){
        int l = 0, r = n - 1;
        while(l <= r){
            int mid = (l + r) / 2;
            auto itr = s.lower_bound(mid);
            if(itr == s.end()) --itr;
            if(H[mid].empty()){
                H[mid] = ask(mid);
            }
            if(H[mid][0] + H[mid][1] == 0) return mid;
            if(H[mid][0] + H[mid][1] != det){
                update(mid + 1, 1);
                s.erase(mid);
                break;
            }
            if(H[mid][1] - q(mid + 2, n)){
                l = mid + 1;
            }
            else{
                r = mid - 1;
            }
        }
    }
}

Compilation message (stderr)

prize.cpp: In function 'int find_best(int)':
prize.cpp:36:14: warning: control reaches end of non-void function [-Wreturn-type]
   36 |     set<int> s;
      |              ^
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...