Submission #1267812

#TimeUsernameProblemLanguageResultExecution timeMemory
1267812minhpkHedgehog Daniyar and Algorithms (IZhO19_sortbooks)C++20
100 / 100
1245 ms98304 KiB
#include <bits/stdc++.h>
#define int long long
using namespace std;
int a,b;
int z[1000005];
struct query{
    int l,k,id;
};
vector <query> pos[1000005];
int prv[1000005];

int f[4000005];
int res[1000005];

void update(int id,int l,int r,int pos,int val){
    if (l==r){
        f[id]=max(f[id],val);
        return;
    }
    int mid=(l+r)/2;
    if (pos<=mid){
        update(id*2,l,mid,pos,val);
    }else{
        update(id*2+1,mid+1,r,pos,val);
    }
    f[id]=max(f[id*2],f[id*2+1]);
}
int get(int id,int l,int r,int x,int y){
    if (x>r || y<l){
        return 0;
    }
    if (l>=x && y>=r){
        return f[id];
    }
    int mid=(l+r)/2;
    return max(get(id*2,l,mid,x,y),get(id*2+1,mid+1,r,x,y));
}
signed main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    cin >> a >> b;
    for (int i=1;i<=a;i++){
         cin >> z[i];
    }
    for (int i=1;i<=b;i++){
         int l,r,k;
         cin >> l >> r >> k;
         pos[r].push_back({l,k,i});
    }
    stack<int> st;
    for (int i=1;i<=a;i++){
         while (st.size() && z[i]>=z[st.top()]){
               st.pop();
         }
         if (st.size()){
             prv[i]=st.top();
         }
         st.push(i);
    }
    for (int i=1;i<=a;i++){
         if (prv[i]){
             int val=z[i]+z[prv[i]];
             update(1,1,a,prv[i],val);
         }
         for (auto [l,k,id]:pos[i]){
              int val=get(1,1,a,l,i);
              if (val>k){
                  res[id]=0;
              }else{
                  res[id]=1;
              }
         }
    }
    for (int i=1;i<=b;i++){
         cout << res[i] << "\n";
    }
    return 0;
}
#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...