| # | Time | Username | Problem | Language | Result | Execution time | Memory |
|---|---|---|---|---|---|---|---|
| 1358305 | ivaziva | Hedgehog Daniyar and Algorithms (IZhO19_sortbooks) | C11 | 0 ms | 0 KiB |
#include <bits/stdc++.h>
using namespace std;
#define MAXN 1000005
#define MAXM 21
#define int long long
int n,m,w[MAXN],lg[MAXN];
int sparse[MAXM][MAXN];
int diff[MAXN];
int query(int l,int r) {int k=lg[r-l+1];return max(sparse[k][l],sparse[k][r-(1<<k)+1]);}
int32_t main()
{
for (int i=2;i<MAXN;i++) lg[i]=lg[i/2]+1;
cin>>n>>m;for (int i=1;i<=n;i++) cin>>w[i];
if (n<=5000)
{
for (int i=1;i<=n;i++) sparse[0][i]=w[i];
for (int j=1;j<MAXM;j++)
{
for (int i=1;i+(1<<j)-1<=n;i++) sparse[j][i]=max(sparse[j-1][i],sparse[j-1][i+(1<<(j-1))]);
}
for (int i=1;i<=m;i++)
{
int l,r,k;cin>>l>>r>>k;bool valid=true;
for (int poz=l;poz<r;poz++)
{
int maxi=query(poz+1,r);
if (w[poz]+maxi>k and maxi<w[poz]) {valid=false;break;}
}
if (valid) cout<<1<<endl;
else cout<<0<<endl;
}
return 0;
}
for (int i=1;i<n;i++) diff[i]=w[i]-w[i+1];
for (int i=1;i<n;i++) sparse[0][i]=diff[i];
for (int j=1;j<MAXM;j++)
{
for (int i=1;i+(1<<j)-1<n;i++) sparse[j][i]=max(sparse[j-1][i],sparse[j-1][i+(1<<(j-1))]);
}
for (int i=1;i<=m;i++)
{
int l,r,k;cin>>l>>r>>k;if (l==r) {cout<<1<<endl;continue;}
if (query(l,r-1)>0) cout<<0<<endl;
else cout<<1<<endl;
}
return 0;
}