이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include "dungeons.h"
#include<bits/stdc++.h>
#define pii pair<long long, long long>
#define f first
#define s second
using namespace std;
#include <vector>
vector<int> s, p, w, l;
int n;
const long long inf = 1e18;
const int N =4e5 + 5;
long long nxt[N][33], add[N][33], mx[N][33];
void init(int N, std::vector<int> S, std::vector<int> P, std::vector<int> W, std::vector<int> L) {
s = S; p = P; w = W; l = L;
n = N;
for(int i = 0; i < n; i++) nxt[i][0]= w[i], add[i][0] = s[i], mx[i][0] = s[i];
nxt[n][0] = n;
mx[n][0] = -1e9;
for(int i = 1; i <= 30; i++) {
for(int j = 0; j <= n; j++) {
nxt[j][i] = nxt[nxt[j][i - 1]][i - 1],
add[j][i]= add[j][i - 1] + add[nxt[j][i - 1]][i - 1];
mx[j][i] = max(mx[j][i - 1], -add[j][i - 1] + mx[nxt[j][i - 1]][i - 1]);
}
}
}
long long simulate(int x, int Z) {
long long ans2 = Z, cn = 0;
while(x != n) {
++cn;
assert(cn <= 30);
for(int i = 30; i >= 0; i--) {
if(mx[x][i] <= ans2) {
ans2 += add[x][i];
x = nxt[x][i];
} //else cout << "+" << 30 << endl;
}
if(x == n) break;
assert(ans2 < s[x]);
ans2 += s[x];
x = l[x];
}
return ans2;
}
# | 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... |