#include "dungeons.h"
#include <bits/stdc++.h>
using namespace std;
const int maxn=5*1e4+5;
const int logg=30;
int n;
vector<int> s,p,w,l;
int maxx[maxn][32];
long long sum[maxn][32];
int ver[maxn][32];
void init(int N, std::vector<int> S, std::vector<int> P, std::vector<int> W, std::vector<int> L)
{
n=N;
s=S;
p=P;
w=W;
l=L;
for(int i=0;i<n;i++)
{
maxx[i][0]=s[i];
sum[i][0]=s[i];
ver[i][0]=w[i];
}
ver[n][0]=n;
for(int j=1;j<=logg;j++)
{
for(int i=0;i<=n;i++)
{
maxx[i][j]=max(maxx[i][j-1],maxx[ver[i][j-1]][j-1]);
sum[i][j]=sum[i][j-1]+sum[ver[i][j-1]][j-1];
if(1e18-sum[i][j-1]<sum[ver[i][j-1]][j-1])sum[i][j]=1e18;
ver[i][j]=ver[ver[i][j-1]][j-1];
}
}
return;
}
long long simulate(int x, int zz)
{
long long z=zz;
while(1)
{
for(int j=logg;j>=0;j--)
{
if(maxx[x][j]<=z)
{
z+=sum[x][j];
x=ver[x][j];
break;
}
}
if(x==n)return z;
if(z<s[x])
{
z+=p[x];
x=l[x];
}
else
{
z+=s[x];
x=w[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... |