Submission #1296950

#TimeUsernameProblemLanguageResultExecution timeMemory
1296950MisterReaperFloppy (RMI20_floppy)C++20
100 / 100
63 ms4416 KiB
#include <stdlib.h> #include <string.h> #include "bits/stdc++.h" #include "floppy.h" namespace { constexpr int inf = int(1E9) + 5; }; void read_array(int subtask_id, const std::vector<int> &v) { // std::string bits = "001100"; // save_to_floppy(bits); int N = int(v.size()); std::string s; std::vector<int> stk; for (int i = 0; i < N; ++i) { while (!stk.empty() && v[stk.back()] < v[i]) { s += '0'; stk.pop_back(); } s += '1'; stk.emplace_back(i); } save_to_floppy(s); } std::vector<int> solve_queries(int subtask_id, int N, const std::string &bits, const std::vector<int> &a, const std::vector<int> &b) { // std::vector<int> answers = {0, 0, 0, 0, 1, 2, 2, 2, 2, 3}; // return answers; int Q = int(a.size()); std::vector<int> ans(Q); const int LG = std::__lg(N); std::vector<int> stk; std::vector<std::vector<int>> prv(LG + 1, std::vector<int>(N)); int p = 0; for (int i = 0; i < N; ++i) { while (bits[p] != '1') { p++; stk.pop_back(); } prv[0][i] = stk.empty() ? -1 : stk.back(); stk.emplace_back(i); p++; } for (int i = 1; i <= LG; ++i) { for (int j = 0; j < N; ++j) { if (prv[i - 1][j] == -1) { prv[i][j] = -1; } else { prv[i][j] = prv[i - 1][prv[i - 1][j]]; } } } for (int i = 0; i < Q; ++i) { int x = b[i]; for (int j = LG; j >= 0; --j) { if (prv[j][x] >= a[i]) { x = prv[j][x]; } } ans[i] = x; } return ans; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...