제출 #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...