#include<bits/stdc++.h>
#define ff first
#define ss second
#define int long long
using namespace std;
int n, q, a[100005], st[400005];
set <int> s[100005];
int consst(int pos, int l, int r){
if(l==r){
st[pos]=a[l];
return a[l];
}
int mid=(l+r)/2;
st[pos]=max(consst(pos*2+1, l, mid), consst(pos*2+2, mid+1, r));
return st[pos];
}
int find(int pos, int l, int r, int lb, int rb){
if(lb<=l and rb>=r){
return st[pos];
}
if(r<lb or l>rb){
return 0;
}
int mid=(l+r)/2;
return max(find(pos*2+1, l, mid, lb, rb), find(pos*2+2, mid+1, r, lb, rb));
}
signed main(){
cin>>n>>q;
for(int i=0; i<n; i++){
cin>>a[i];
s[a[i]].insert(i);
}
consst(0, 0, n-1);
while(q--){
int a, b, k;
cin>>a>>b>>k;
int mx=find(0, 0, n-1, a-1, b-1);
auto l=s[mx].lower_bound(a);
int mn=find(0, 0, n-1, *l+1, b-1);
if(k>=mx+mn){
cout<<1<<endl;
}
else{
cout<<0<<endl;
}
}
}
# | 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... |