제출 #879036

#제출 시각아이디문제언어결과실행 시간메모리
879036The_SamuraiHedgehog Daniyar and Algorithms (IZhO19_sortbooks)C++17
0 / 100
963 ms119792 KiB
#include "bits/stdc++.h" using namespace std; using ll = long long; const int inf = 1e9; const int lg = 20; void solve() { int n, q; cin >> n >> q; vector<int> a(n + 1); for (int i = 1; i <= n; i++) cin >> a[i]; stack<int> st; vector jump(lg, vector(n + 1, 0)); for (int i = 1; i <= n; i++) { while (!st.empty() and a[st.top()] <= a[i]) st.pop(); jump[0][i] = st.empty() ? 0 : st.top(); st.push(i); } for (int i = 1; i <= n; i--) { if (!jump[0][i]) break; for (int j = 1; j < lg; j++) { jump[j][i] = jump[j - 1][jump[j - 1][i]]; if (!jump[j][i]) break; } } vector<int> left(n + 1); for (int i = 1; i <= n; i++) left[i] = jump[0][i] ? i : left[i - 1]; while (q--) { int l, r, k; cin >> l >> r >> k; r = left[r]; int ans = 0; for (int i = lg - 1; i >= 0; i--) { if (!jump[i][r] or jump[i][r] < l) continue; ans = a[jump[i][r]] + (i > 0 ? a[jump[i - 1][r]] : a[r]); r = jump[i][r]; } if (!jump[0][r] and jump[0][r] >= l) { ans = a[jump[0][r]] + a[r]; } cout << (int) (ans <= k) << '\n'; } } int main() { cin.tie(0)->sync_with_stdio(false); #ifdef sunnatov freopen("input.txt", "r", stdin); freopen("output.txt", "w", stdout); #endif int queries = 1; // cin >> queries; for (int test_case = 1; test_case <= queries; test_case++) { #ifdef sunnatov cout << "Test case: " << test_case << endl; #endif solve(); cout << '\n'; } }
#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...