# | Time | Username | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
206789 | brcode | Hedgehog Daniyar and Algorithms (IZhO19_sortbooks) | C++14 | 0 ms | 0 KiB |
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>
#define int long long int
using namespace std;
const int MAXN = 1e6+5;
int seg[4*MAXN];
int n,m;
int l[MAXN];
int r[MAXN];
vector<int> v1[MAXN];
int arr[MAXN];
int k[MAXN];
int pos[MAXN];
int ans[MAXN];
void update(int curr,int l,int r,int ind,int val){
if(l==r){
seg[curr] = val;
return;
}
int 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]);
}
int query(int curr,int l,int r,int tl,int tr){
if(l>tr||r<tl){
return 0;
}
if(l<=tl && r<=tr){
return seg[curr];
}
int 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(int 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(int i=1;i<=m;i++){
cin>>l[i]>>r[i]>>k[i];
v1[r[i]].push_back(i);
}
for(int i=1;i<=n;i++){
if(pos[i]){
update(1,1,n,pos[i],arr[i]+arr[pos[i]]);
for(int x:v1[i]){
ans[x]=(query(1,1,n,l[x],r[x])<=k[x]);
}
}
}
for(int i=1;i<=m;i++){
cout<<ans[i]<<endl;
}
}