#include "dungeons.h"
#include <bits/stdc++.h>
#define forsn(i, s, n) for (int i = int(s); i < int(n); i++)
#define forn(i, n) forsn(i, 0, n)
#define dforsn(i, s, n) for (int i = int(n) - 1; i >= int(s); i--)
#define dforn(i, n) dforsn(i, 0, n)
#define sz(x) int(x.size())
#define all(x) begin(x), end(x)
#define pb push_back
#define eb emplace_back
#define fst first
#define snd second
using namespace std;
using vi = vector<int>;
using ii = pair<int, int>;
using ll = long long;
const int MAX_N = 50005;
const int MAX_K = 16;
const ll INF = 1e18;
ll prize[MAX_K][MAX_K][MAX_N];
ll minPower[MAX_K][MAX_K][MAX_N];
int nxt[MAX_K][MAX_K][MAX_N];
void init(int n, vi s, vi p, vi w, vi l) {
s.pb(0), w.pb(n);
n++;
forn(k, MAX_K) {
forn(i, n) {
if (s[i] < 1 << k) {
nxt[k][0][i] = w[i];
prize[k][0][i] = s[i];
minPower[k][0][i] = INF;
} else {
nxt[k][0][i] = l[i];
prize[k][0][i] = p[i];
minPower[k][0][i] = s[i];
}
}
forn(b, MAX_K - 1) forn(i, n) {
int j = nxt[k][b][i];
nxt[k][b + 1][i] = nxt[k][b][j];
prize[k][b + 1][i] = prize[k][b][i] + prize[k][b][j];
minPower[k][b + 1][i] = min(minPower[k][b][i], minPower[k][b][j] - prize[j][b][i]);
}
}
}
ll simulate(int x, int z) {
ll curr = z;
forn(k, MAX_K) dforn(i, MAX_K) {
if (minPower[k][i][x] > curr) {
curr += prize[k][i][x];
x = nxt[k][i][x];
}
}
return curr;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |