이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#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 used[2501];
int dp[2501];
for(int i=0;i<=2500;i++)used[i]=-1;
for(int i=0;i<=2500;i++)dp[i]=-1;
vector<pair<pii,pii> >q;
int ind=0;
while(m--){
int l,r,x;cin>>l>>r>>x;
q.pb({{r,l},{x,ind++}});
}
ind=0;
sort(q.begin(),q.end());
vector<int>ans(100001);
for(int i=1;i<=n;i++){
for(int w=2499;w>=0;w--){
int x=w-a[i];
if(x>a[i]){
dp[w]=max({dp[w],dp[w+1],used[x]});
}
else dp[w]=max(dp[w+1],dp[w]);
}
used[a[i]]=i;
while(ind<q.size()){
if(q[ind].f.f!=i)break;
int ww=q[ind].s.f;
int l=q[ind].f.s;
int idx=q[ind].s.s;
if(ww>=2500){
ans[idx]=1;
ind++;
continue;
}
if(dp[ww+1]>=l)ans[idx]=0;
else ans[idx]=1;
ind++;
}
}
for(int i=0;i<ind;i++)cout<<ans[i]<<"\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:43:22: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::pair<std::pair<int, int>, std::pair<int, int> > >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
43 | while(ind<q.size()){
| ~~~^~~~~~~~~
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |