제출 #480146

#제출 시각아이디문제언어결과실행 시간메모리
480146Ronin13Hedgehog Daniyar and Algorithms (IZhO19_sortbooks)C++14
30 / 100
1102 ms262148 KiB
#include<bits/stdc++.h>
#define ll long long
#define ull unsigned ll
#define pll pair<ll,ll>
#define pii pair<int,int>
#define f first
#define s second
#define pb push_back
#define epb emplace back
#define inf 1e9+1
#define linf 1e18+1
using namespace std;

void solve(){
    int n,m;cin>>n>>m;
    int a[n+1];
    int mx=0;
    for(int i=1;i<=n;i++)cin>>a[i];
    for(int i=1;i<=n;i++)mx=max(mx,a[i]);
    if(mx<=1000){
        int dp[2001][n+1],dp1[2001][n+1];
        for(int j=0;j<=2000;j++){
            for(int i=0;i<=n;i++){
                dp[j][i]=dp1[j][i]=-1;
            }
        }
        dp[0][0]=0;
        int used[2000];
        for(int i=0;i<=2000;i++){
            used[i]=-1;
        }
        for(int w=1;w<=2000;w++){
            for(int i=0;i<=2000;i++){
                used[i]=-1;
            }
            for(int i=1;i<=n;i++){
                if(w-a[i]>a[i])dp[w][i]=max(dp[w][i-1],used[w-a[i]]);
                else dp[w][i]=dp[w][i-1];
                used[a[i]]=i;
            }
        }
        for(int i=1;i<=n;i++){
            dp1[2000][i]=dp[2000][i];
        }
        for(int i=1999;i>=0;i--){
            for(int j=1;j<=n;j++){
                dp1[i][j]=max(dp[i][j],dp1[i+1][j]);
            }
        }

        while(m--){
            int l,r,x;cin>>l>>r>>x;
            if(x>=2000){
                cout<<1<<"\n";
                continue;
            }
            if(dp1[x+1][r]<l)cout<<1<<"\n";
            else cout<<0<<"\n";
        }
        return;
    }
    if(n<=5000){
        int mx[n+1][n+1];
        for(int i=1;i<=n;i++){
            mx[i][i]=a[i];
            for(int j=i+1;j<=n;j++)mx[i][j]=max(mx[i][j-1],a[j]);
        }
        while(m--){
            int l,r,x;cin>>l>>r>>x;
            bool ind=true;
            for(int i=l+1;i<=r;i++){
                if(a[i]<mx[l][i-1]){
                    if(a[i]+mx[l][i-1]>x){
                        ind=false;
                    }
                }
            }
            if(ind)cout<<1<<"\n";
            else cout<<0<<"\n";
        }
        return;
    }
    vector<pii>aa,b;
    aa.pb({0,0});
    b.pb({0,0});
    int st=1;
    for(int i=2;i<=n;i++){
        if(a[i]<a[i-1]){
            aa.pb({st,st});
            b.pb({i-1,st});
            st=i;
        }
    }
    aa.pb({st,st});
    b.pb({n,st});
    while(m--){
        int l,r,x;cin>>l>>r>>x;
        pii ss={l,inf},rr={r,-6};
        int ind=upper_bound(aa.begin(),aa.end(),ss)-aa.begin()-1;
        int ind1=lower_bound(b.begin(),b.end(),rr)-b.begin();
        if(aa[ind].s==b[ind1].s)cout<<1<<"\n";

        else cout<<0<<"\n";
    }
}

int main(){
    ios_base::sync_with_stdio(false);cin.tie(0);
    //freopen("in.in","r",stdin);freopen("out.out","w",stdout);
    int test=1;//cin>>test;
    while(test--){
        solve();
    }
}

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

sortbooks.cpp: In function 'void solve()':
sortbooks.cpp:30:20: warning: iteration 2000 invokes undefined behavior [-Waggressive-loop-optimizations]
   30 |             used[i]=-1;
      |             ~~~~~~~^~~
sortbooks.cpp:29:22: note: within this loop
   29 |         for(int i=0;i<=2000;i++){
      |                     ~^~~~~~
sortbooks.cpp:34:24: warning: iteration 2000 invokes undefined behavior [-Waggressive-loop-optimizations]
   34 |                 used[i]=-1;
      |                 ~~~~~~~^~~
sortbooks.cpp:33:26: note: within this loop
   33 |             for(int i=0;i<=2000;i++){
      |                         ~^~~~~~
sortbooks.cpp:30:20: warning: 'void* __builtin_memset(void*, int, long unsigned int)' forming offset [8000, 8003] is out of the bounds [0, 8000] of object 'used' with type 'int [2000]' [-Warray-bounds]
   30 |             used[i]=-1;
      |             ~~~~~~~^~~
sortbooks.cpp:28:13: note: 'used' declared here
   28 |         int used[2000];
      |             ^~~~
sortbooks.cpp:34:24: warning: 'void* __builtin_memset(void*, int, long unsigned int)' forming offset [8000, 8003] is out of the bounds [0, 8000] of object 'used' with type 'int [2000]' [-Warray-bounds]
   34 |                 used[i]=-1;
      |                 ~~~~~~~^~~
sortbooks.cpp:28:13: note: 'used' declared here
   28 |         int used[2000];
      |             ^~~~
#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...