// In the name of Allah
#include <bits/stdc++.h>
#include "prize.h"
using namespace std;
typedef long long int ll;
typedef long double ld;
typedef pair<int, int> pii;
typedef pair<ll, ll> pll;
typedef complex<ld> cld;
#define all(x) (x).begin(),(x).end()
#define len(x) ((ll) (x).size())
#define F first
#define S second
#define pb push_back
#define sep ' '
#define endl '\n'
#define Mp make_pair
#define kill(x) cout << x << '\n', exit(0)
#define set_dec(x) cout << fixed << setprecision(x);
#define file_io(x,y) freopen(x, "r", stdin); freopen(y, "w", stdout);
mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());
const int maxn = 2e5 + 4;
const int SR = 200;
const int limit = 1e4;
int n, fx[maxn], Qt;
int M[maxn]; pii valx[maxn];
vector<int> vc; int mx;
void askx(int i) {
if (M[i]) return ;
if (Qt + 1 > limit) exit(23);
M[i] = 1; vector<int> res = ask(i); Qt++;
valx[i].F = res[0]; valx[i].S = res[1];
fx[i] = ((valx[i].F + valx[i].S) >= mx);
}
int solvex(int l, int r, int R) {
if (l >= r) return 0;
if (r - l == 1) {
int j = r - 1; askx(j);
if (valx[j].F + valx[j].S > mx) {
mx = valx[j].F + valx[j].S;
return -1;
}
if (!fx[j]) return 1;
else return 0;
}
int j = r - 1; askx(j);
if (valx[j].F + valx[j].S > mx) {
mx = valx[j].F + valx[j].S;
return -1;
}
if (!fx[j]) {
int Rx = solvex(l, r - 1, R);
if (Rx == -1) return -1;
return 1 + Rx;
}
if (valx[j].F == R) return 0;
int mid = (l + r) / 2;
int R1 = solvex(l, mid, R);
if (R1 == -1) return -1;
int R2 = solvex(mid, r, R + R1);
if (R2 == -1) return -1;
return R1 + R2;
}
void solvef() {
int R = 0;
for (int i = 0; i < n; i++) {
if (!M[i]) fx[i] = 0;
else fx[i] = ((valx[i].F + valx[i].S) >= mx);
}
for (int i = 0; i < n; i += SR) {
int x = solvex(i, min(n, i + SR), R);
if (x == -1) {
solvef();
return ;
}
R += x;
}
}
int find_best(int nx) {
n = nx;
mx = 0; solvef();
for (int i = 0; i < n; i++) {
if (!M[i]) continue;
if (valx[i].F + valx[i].S == 0) return i;
}
return -1;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |