This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include <bits/stdc++.h>
#define int long long
#define fi first
#define se second
using namespace std;
int32_t main()
{
ios_base::sync_with_stdio(false);
cin.tie(NULL);
int n, m;
cin >> n >> m;
vector<int> a(n + 1);
for (int i = 1; i <= n; i++) cin >> a[i];
vector<int> st;
vector<vector<int>> v(n + 1);
for (int i = 1; i <= n; i++) {
while (!st.empty() && a[i] >= a[st.back()]) {
st.pop_back();
}
if (!st.empty()) {
v[st.back()].push_back(i);
}
st.push_back(i);
}
vector<vector<array<int, 3>>> qr(n + 1);
for (int i = 0; i < m; i++) {
int l, r, x;
cin >> l >> r >> x;
qr[l].push_back({r, x, i});
}
vector<int> fen(n + 1);
auto upd = [&](int x, int val) {
for (; x <= n; x += x & -x) fen[x] = max(fen[x], val);
};
auto qry = [&](int x) {
int res = 0;
for (; x > 0; x -= x & -x) res = max(res, fen[x]);
return res;
};
vector<int> ans(m);
for (int l = n; l >= 1; l--) {
for (auto j : v[l]) {
upd(j, a[l] + a[j]);
}
for (auto [r, x, i] : qr[l]) {
ans[i] = (qry(r) <= x ? 1 : 0);
}
}
for (int i = 0; i < m; i++) cout << ans[i] << '\n';
return 0;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |