제출 #1287972

#제출 시각아이디문제언어결과실행 시간메모리
1287972quocbaooHedgehog Daniyar and Algorithms (IZhO19_sortbooks)C++20
13 / 100
1930 ms182704 KiB
#include<bits/stdc++.h>
#define fi first
#define se second
#define ll long long
using namespace std;
int n,m,a[1000005];
namespace sub1{
    void xuly(){
        while (m--){
            int l,r,w;cin>>l>>r>>w;int ma=0;
            for (int i=l;i<=r;i++){
                for (int j=i+1;j<=r;j++){
                    if (a[i]>a[j]){
                        ma=max(ma,a[i]+a[j]);
                    }
                }
            }
            if (ma>w) cout<<"0"<<'\n';
            else cout<<"1"<<'\n';
        }
    }
}
namespace full{
    const int N=1e6;
    int ma[N*4+5];pair<int,int> nex[N+5][22];
    void build(int id,int l,int r){
        if (l==r){
            ma[id]=a[l];
            return;
        }
        int mid=(l+r)/2;
        build(id*2,l,mid);build(id*2+1,mid+1,r);
        ma[id]=max(ma[id*2],ma[id*2+1]);
    }
    int gt(int id,int l,int r,int u,int v){
        if (l>v||r<u) return -1e9;
        if (l>=u&&r<=v) return ma[id];
        int mid=(l+r)/2;
        return max(gt(id*2,l,mid,u,v),gt(id*2+1,mid+1,r,u,v));
    }
    int get(int l,int r){
        if (l>r) return -1e9;
        return gt(1,1,n,l,r);
    }
    void xuly(){
        stack<int> st;
        st.push(n+1);a[n+1]=1e9+8;
        for (int i=n;i>=1;i--){
            while (!st.empty()){
                if (a[i]>a[st.top()]) st.pop();
                else break;
            }
            nex[i][0]={st.top()-1,a[i]+get(i+1,st.top()-1)};
            st.push(i);
        }
        for (int j=0;j<=20;j++)  nex[n+1][j]={n+1,-1e9};
        for (int j=1;j<=20;j++){
            for (int i=1;i<=n;i++){
                if (nex[i][j-1].fi+1>n){
                    nex[i][j].fi=n+1;
                    nex[i][j].se=nex[i][j-1].se;continue;
                }
                nex[i][j].fi=nex[nex[i][j-1].fi+1][j-1].fi;
                nex[i][j].se=max(nex[i][j-1].se,nex[nex[i][j-1].fi+1][j-1].se);
            }
        }
//        cout<<nex[18][0].fi<<" "<<nex[16][1].se<<endl;
        while (m--){
            int l,r,w;cin>>l>>r>>w;
            if (l==r){
                cout<<"1"<<'\n';continue;
            }
            bool kt=false;int maa=-1e9;
            for (int j=20;j>=0;j--){
                if (nex[l][j].fi<=r){
                    maa=max(maa,nex[l][j].se);
                    l=nex[l][j].fi+1;
                }
            }
            if (l<r) maa=max(maa,a[l]+get(l+1,r));
            if (maa>w) cout<<"0"<<'\n';else cout<<"1"<<'\n';
        }
    }
}
int main(){
    if (fopen("sortbooks.inp","r")){
        freopen("sortbooks.inp","r",stdin);
        freopen("sortbooks.out","w",stdout);
    }
    ios_base::sync_with_stdio(0);
    cin.tie(0);cout.tie(0);
    cin>>n>>m;
    for (int i=1;i<=n;i++) cin>>a[i];
//    if (n<=500&&m<=500) return sub1::xuly(),0;
    full::xuly();
}

컴파일 시 표준 에러 (stderr) 메시지

sortbooks.cpp: In function 'int main()':
sortbooks.cpp:87:16: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   87 |         freopen("sortbooks.inp","r",stdin);
      |         ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~
sortbooks.cpp:88:16: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   88 |         freopen("sortbooks.out","w",stdout);
      |         ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~
#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...