#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define MOD 1000000007
const int N = 200005;
ll fen[N], n;
void update(ll i , ll x){
for( ; i >= 1 ; i -= i & -i){
fen[i] = max(fen[i] , x);
}
}
ll query(ll i){
ll mx = 0;
for( ; i <= n ;i += i & -i){
mx = max(mx , fen[i]);
}
return mx;
}
void solve(){
ll m, l , r, c;
cin >> n >> m;
ll a[n + 1];
vector<tuple<int, int, int>> q[n + 1];
ll ans[m + 1];
stack<int> s;
s.push(0);
a[0] = 2e9 + 5;
for(int i = 1; i <= n; i ++){
cin >> a[i];
}
for(int i = 1; i <= m; i ++){
cin >> l >> r >> c;
q[r].push_back({l, c, i});
}
for(int i = 1; i <= n; i ++){
while(a[s.top()] <= a[i]){
s.pop();
}
if(s.top()){
update(s.top(), a[s.top()] + a[i]);
}
s.push(i);
for(auto [l, r, c] : q[i]){
ans[c] = query(l) <= r;
}
}
for(int i = 1 ; i <= m; i++){
cout << ans[i] << '\n';
}
cout << '\n';
}
int main() {
ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0);
int tests = 1;
// cin >> tests;
for(int i = 1; i <= tests; i ++){
solve();
}
}
# | 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... |