This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include <bits/stdc++.h>
#include "dungeons.h"
#pragma GCC optimize("O3,unroll-loops")
#pragma GCC target("avx,avx2,bmi,bmi2,lzcnt,popcnt")
#define INF LLONG_MAX
using namespace std;
typedef long long ll;
const int lgb=8;
const int lg=8;
ll st0[25][lg][400001];
ll st1[25][lg][400001];
int st2[25][lg][400001];
vector<int> S,P,W,L;
int N;
void init(int n, vector<int> s, vector<int> p, vector<int> w, vector<int> l) {
s.push_back(0);
N=n;
S=s;
P=p;
W=w;
L=l;
for(int i=0;i<25;i++){
for(int z=0;z<n;z++){
if(s[z]<(1<<i)){
st0[i][0][z]=s[z];
if(w[z]!=n && s[w[z]]<(1<<i)){
st1[i][0][z]=-INF;
}
else{
st1[i][0][z]=s[z]-s[w[z]];
}
st2[i][0][z]=w[z];
}
else{
st0[i][0][z]=p[z];
if(l[z]!=n && s[l[z]]<(1<<i)){
st1[i][0][z]=-INF;
}
else{
st1[i][0][z]=p[z]-s[l[z]];
}
st2[i][0][z]=l[z];
}
}
st0[i][0][n]=0;
st1[i][0][n]=0;
st2[i][0][n]=n;
for(int j=1;j<lg;j++){
for(int z=0;z<=n;z++){
st0[i][j][z]=st0[i][j-1][z];
st1[i][j][z]=st1[i][j-1][z];
st2[i][j][z]=st2[i][j-1][z];
for(int k=0;k<lgb-1;k++){
int ind=st2[i][j][z];
if(st1[i][j-1][ind]!=-INF){
st1[i][j][z]=max(st1[i][j][z],st1[i][j-1][ind]+st0[i][j][z]);
}
st0[i][j][z]+=st0[i][j-1][ind];
st2[i][j][z]=st2[i][j-1][ind];
}
}
}
}
return;
}
long long simulate(int x, int z) {
ll res=z;
while(x!=N){
int h=0;
for(int i=0;i<25;i++){
if((res&(1<<i))){
h=i;
}
}
if(S[x]>=(1LL<<h) && res>=S[x]){
res+=S[x];
x=W[x];
}
else{
for(int i=lg-1;i>=0;i--){
for(int j=1;j<lgb;j++){
if(st1[h][i][x]<-res){
res+=st0[h][i][x];
x=st2[h][i][x];
}
}
}
res+=st0[h][0][x];
x=st2[h][0][x];
}
}
return res;
}
# | 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... |