제출 #342261

#제출 시각아이디문제언어결과실행 시간메모리
342261SeDunionHedgehog Daniyar and Algorithms (IZhO19_sortbooks)C++17
100 / 100
1097 ms59584 KiB
#include<bits/stdc++.h> using namespace std; using ll = long long; const int N = 1e6 + 66; // l<=i<=j<=r a[i] > a[j] a[i]+a[j]>x // int a[N], ans[N]; vector<tuple<int,int,int>> q[N]; int f[N]; void upd(int i, int j) { i = N - 1 - i; while (i < N) { f[i] = max(f[i], j); i |= i + 1; } } int get(int i) { i = N - 1 - i; int j = 0; while (i >= 0) { j = max(j, f[i]); i &= i + 1; i--; } return j; } int main() { ios_base::sync_with_stdio(0); cin.tie(0), cout.tie(0); int n, m; cin >> n >> m; for (int i = 1 ; i <= n ; ++ i) cin >> a[i]; for (int i = 1 ; i <= m ; ++ i) { int l, r, k; cin >> l >> r >> k; q[r].push_back({l, k, i}); } stack<int> s; for (int i = 1 ; i <= n ; ++ i) { while (s.size() && a[s.top()] <= a[i]) s.pop(); if (s.size()) { int j = s.top(); upd(j, a[i] + a[j]); } s.push(i); for (auto [l, k, j] : q[i]) { ans[j] = (get(l) <= k); } } for (int i = 1 ; i <= m ; ++ i) cout << ans[i] << "\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...