제출 #603967

#제출 시각아이디문제언어결과실행 시간메모리
603967keta_tsimakuridze던전 (IOI21_dungeons)C++17
26 / 100
680 ms338292 KiB
#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 timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...