Submission #1358306

#TimeUsernameProblemLanguageResultExecution timeMemory
1358306ivazivaHedgehog Daniyar and Algorithms (IZhO19_sortbooks)C++20
13 / 100
1292 ms174208 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;
}
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...