Submission #952356

#TimeUsernameProblemLanguageResultExecution timeMemory
952356ind1vHedgehog Daniyar and Algorithms (IZhO19_sortbooks)C++11
100 / 100
2523 ms262144 KiB
#include <bits/stdc++.h> using namespace std; const int N = 1e6 + 2; const int L = 20; int n, m; int rx[L][N]; int mx[L][N]; int mxr[L][N]; int rmx(int l, int r) { int w = __lg(r - l + 1); return max(mx[w][l], mx[w][r - (1 << w) + 1]); } int main() { ios::sync_with_stdio(false); cin.tie(0); cin >> n >> m; for (int i = 1; i <= n; i++) { cin >> mx[0][i]; } stack<int> st; for (int i = n; i >= 1; i--) { while (!st.empty() && mx[0][i] > mx[0][st.top()]) { st.pop(); } rx[0][i] = (st.empty() ? n + 1 : st.top()); st.push(i); } rx[0][n + 1] = n + 1; for (int j = 1; j < L; j++) { for (int i = 1; i <= n + 1; i++) { rx[j][i] = rx[j - 1][rx[j - 1][i]]; } for (int i = 1; i + (1 << j) - 1 <= n; i++) { mx[j][i] = max(mx[j - 1][i], mx[j - 1][i + (1 << (j - 1))]); } } for (int i = 1; i <= n + 1; i++) { if (rx[0][i] > i + 1) { mxr[0][i] = mx[0][i] + rmx(i + 1, rx[0][i] - 1); } } for (int j = 1; j < L; j++) { for (int i = 1; i <= n + 1; i++) { mxr[j][i] = max(mxr[j - 1][i], mxr[j - 1][rx[j - 1][i]]); } } while (m--) { int l, r, k; cin >> l >> r >> k; bool f = true; for (int i = L - 1; i >= 0; i--) { if (rx[i][l] <= r) { f &= (mxr[i][l] <= k); l = rx[i][l]; } } if (l < r) { f &= (mx[0][l] + rmx(l + 1, r) <= k); } cout << f << '\n'; } return 0; }
#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...