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 <iostream>
#include <bits/stdc++.h>
using namespace std;
const long long MAXN = 1e6+5;
long long seg[4*MAXN];
long long n,m;
long long l[MAXN];
long long r[MAXN];
vector<long long> v1[MAXN];
long long arr[MAXN];
long long k[MAXN];
long long pos[MAXN];
long long ans[MAXN];
void update(long long curr,long long l,long long r,long long ind,long long val){
if(l==r){
seg[curr] = val;
return;
}
long long mid = (l+r)/2;
if(ind<=mid){
update(2*curr,l,mid,ind,val);
}else{
update(2*curr+1,mid+1,r,ind,val);
}
seg[curr] = max(seg[2*curr],seg[2*curr+1]);
}
long long query(long long curr,long long l,long long r,long long tl,long long tr){
if(l>tr||r<tl){
return 0;
}
if(l<=tl && r<=tr){
return seg[curr];
}
long long mid = (l+r)/2;
return max(query(2*curr,l,mid,tl,tr),query(2*curr+1,mid+1,r,tl,tr));
}
int main() {
cin>>n>>m;
for(long long i=1;i<=n;i++){
cin>>arr[i];
pos[i] = i-1;
while(pos[i] && arr[pos[i]]<=arr[i]){
pos[i] = pos[pos[i]];
}
}
for(long long i=1;i<=m;i++){
cin>>l[i]>>r[i]>>k[i];
v1[r[i]].push_back(i);
}
for(long long i=1;i<=n;i++){
if(pos[i]){
update(1,1,n,pos[i],arr[i]+arr[pos[i]]);
}
for(long long x:v1[i]){
ans[x]=(query(1,1,n,l[x],r[x])<=k[x]);
}
}
for(long long i=1;i<=m;i++){
cout<<ans[i]<<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... |