제출 #1174304

#제출 시각아이디문제언어결과실행 시간메모리
1174304PagodePaiva던전 (IOI21_dungeons)C++20
0 / 100
1 ms584 KiB
#include<bits/stdc++.h> #include <vector> using namespace std; const int N = 400010; const int LOGN = 20; struct Binary_Lifting{ int pai[N][LOGN], val[N][LOGN]; void build(int n){ for(int bit = 1;bit < LOGN;bit++){ for(int i = 0;i <= n;i++){ pai[i][bit] = pai[pai[i][bit-1]][bit-1]; val[i][bit] = val[i][bit-1] + val[pai[i][bit-1]][bit-1]; } } } } bin[6]; set <int> valores_s; void init(int n, std::vector<int> s, std::vector<int> p, std::vector<int> w, std::vector<int> l) { for(int i = 0;i < n;i++){ valores_s.insert(s[i]); } if(valores_s.size() > 5) exit(0); for(int i = 0;i < n;i++){ bin[0].pai[i][0] = l[i]; bin[0].val[i][0] = p[i]; } bin[0].pai[n][0] = n; bin[0].val[n][0] = 0; int con = 1; for(auto x : valores_s){ for(int i = 0;i < n;i++){ bin[con].pai[i][0] = (x >= s[i] ? w[i] : l[i]); bin[con].val[i][0] = (x >= s[i] ? s[i] : p[i]); } bin[con].pai[n][0] = n; bin[con].val[n][0] = 0; con++; } for(int i = 0;i < con;i++){ bin[i].build(n); } return; } long long simulate(int st, int z) { int res = z; int con = 0; for(auto x : valores_s){ if(res < x){ //cout << 'a' << ' '; int dif = x-res; for(int bit = LOGN-1;bit >= 0;bit--){ int p = bin[con].pai[st][bit], v = bin[con].val[st][bit]; if(v >= dif) continue; st = p; dif -= v; res += v; } res += bin[con].val[st][0]; st = bin[con].pai[st][0]; } //cout << res << ' ' << st << '\n'; con++; } res += bin[con].val[st][LOGN-1]; return res; }
#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...