Submission #1156340

#TimeUsernameProblemLanguageResultExecution timeMemory
1156340SyedSohaib_123Red-blue table (IZhO19_stones)C++20
0 / 100
0 ms328 KiB
#include <bits/stdc++.h>

using namespace std;

#define append push_back
#define int long long

const int N=1e6+10,LG=21;
int mod=998244353;

int a[N],b[N],tree[N<<2],mn[N<<2],mx[N<<2],n,most;
vector<int>v;

void build(int l=1,int r=n,int s=1){
    if(l==r){
        tree[s]=0;
        mn[s]=mx[s]=a[l];
        return;
    }
    int m=(l+r)>>1;
    build(l,m,s*2);
    build(m+1,r,s*2+1);
    mn[s]=min(mn[s*2],mn[s*2+1]);
    mx[s]=max(mx[s*2],mx[s*2+1]);
    tree[s]=max({tree[s*2],tree[s*2+1],mx[s*2]-mn[s*2+1]});
}

void get(int a,int b,int l=1,int r=n,int s=1){
    if(r<a or l>b) return;
    if(a<=l and r<=b){
        v.append(s);most=max(most,tree[s]);
        return;
    }
    int m=(l+r)>>1;
    get(a,b,l,m,s*2);
    get(a,b,m+1,r,s*2+1);
}

void solve(int tst){
    int m;
    cin>>n>>m;
    for(int i=1;i<=n;i++){
        cin>>a[i];
    }
    build();
    while(m--){
        int a,b,c;
        cin>>a>>b>>c;
        most=0;
        v.clear();
        get(a,b);
        for(int i=0;i<v.size();i++){
            for(int j=i+1;j<v.size();j++){
                most=max(most,mx[v[i]]-mn[v[j]]);
            }
        }
        cout<<(most<=c)<<endl;
    }
}

signed main(){
    ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0);
    int t = 1;
    // cin >> t;
    for(int i=1;i<=t;i++){
        solve(i);
        // if(i!=t) cout<<endl;
    }
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...