#include "dungeons.h"
#include<bits/stdc++.h>
using namespace std;
#define ll long long
int n;
vector<vector<vector<pair<int,ll>>>> j;
vector<int> sl;
void init(int n, vector<int> s, vector<int> p, vector<int> w, vector<int> l){
::n = n;
sl.push_back(0);
for (int i=0; i<n; i++){
if (find(sl.begin(), sl.end(), s[i]) == sl.end()) sl.push_back(s[i]);
}
sort(sl.begin(), sl.end());
j.assign(sl.size(), vector<vector<pair<int,ll>>>(n+1, vector<pair<int,ll>>(20)));
for (int x=0; x<sl.size(); x++){
j[x][n][0] = {n, 0};
for (int i=0; i<n; i++){
if (sl[x] >= s[i]) j[x][i][0] = {w[i], s[i]};
else j[x][i][0] = {l[i], p[i]};
}
}
for (int x=0; x<sl.size(); x++){
for (int k=1; k<20; k++){
for (int i=0; i<=n; i++) j[x][i][k] = {j[x][j[x][i][k-1].first][k-1].first, j[x][i][k-1].second+j[x][j[x][i][k-1].first][k-1].second};
}
}
return;
}
ll simulate(int x, int iz){
ll z = iz;
int y;
for (int i=0; i<sl.size(); i++){
if (z >= sl[i]) y = i;
}
while (x != n){
for (int k=19; k>=0; k--){
if (y+1 == sl.size() || z+j[y][x][k].second < sl[y+1]){
z += j[y][x][k].second;
x = j[y][x][k].first;
}
}
z += j[y][x][0].second;
x = j[y][x][0].first;
for (int i=0; i<sl.size(); i++){
if (z >= sl[i]) y = i;
}
}
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... |