This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#pragma GCC optimize("Ofast,no-stack-protector,unroll-loops,fast-math,O3")
#include "dungeons.h"
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int mxn = 4e5+1;
const int m = 24;
const int c = 8;
int b[mxn][m][c], t[mxn][m][c];
ll a[mxn][m][c];
ll suf[mxn];
vector<int> s, p, w, l;
int n;
const ll inf = (1<<30);
void init(int _n, vector<int> _s, vector<int> _p, vector<int> _w, vector<int> _l) {
n = _n, s = _s, p = _p, w = _w, l = _l;
suf[n] = 0;
for(int i = n-1; ~i; --i){
suf[i] = s[i] + suf[w[i]];
}
for(int i = 0; i < c; ++i){
b[n][0][i] = n;
t[n][0][i] = inf;
a[n][0][i] = 0;
for(int k = 0; k < n; ++k){
if(s[k] <= (1<<(i*3))){
t[k][0][i] = inf;
a[k][0][i] = s[k];
b[k][0][i] = w[k];
}
else{
t[k][0][i] = s[k];
a[k][0][i] = p[k];
b[k][0][i] = l[k];
}
}
for(int j = 1; j < m; ++j){
for(int k = 0; k < n; ++k){
int cur = j-1;
t[k][j][i] = (t[b[k][cur][i]][cur][i] == inf ? t[k][cur][i] : min((int)max(0ll,t[b[k][cur][i]][cur][i] - a[k][cur][i]), t[k][cur][i]));
a[k][j][i] = a[b[k][cur][i]][cur][i] + a[k][cur][i];
b[k][j][i] = b[b[k][cur][i]][cur][i];
}
}
}
}
ll simulate(int x, int _z) {
ll z = _z;
for(int i = 0; i < c; ++i){
while(x != n && z <= (1<<((i+1)*3))){
for(int j = m-1; ~j; --j){
while(x != n && z < t[x][j][i]){
z += a[x][j][i];
x = b[x][j][i];
}
}
if(z >= s[x]){
z += s[x];
x = w[x];
} else {
z += p[x];
x = l[x];
}
}
}
z+=suf[x];
return z;
}
# | 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... |