Submission #171098

#TimeUsernameProblemLanguageResultExecution timeMemory
171098bgspartanHedgehog Daniyar and Algorithms (IZhO19_sortbooks)C++14
0 / 100
603 ms50588 KiB
#include<bits/stdc++.h> #define ll long long using namespace std; const ll maxN=1000001,INF=9999999999999; ll w[maxN],ans[maxN]; ll segmMax[maxN*8],segmInd[maxN*8]; pair<ll,ll> findMax(ll l,ll r,ll iL,ll iR,ll idx){ if(l>iR or iL>r){ return {0,0}; }else{ if(l<=iL and r>=iR){ return {segmMax[idx],segmInd[idx]}; }else{ ll ans1,ind1,ind2,ans2; ans1=findMax(l,r,iL,(iL+iR)/2,idx*2).first; ind1=findMax(l,r,iL,(iL+iR)/2,idx*2).second; ans2=findMax(l,r,(iL+iR)/2+1,iR,idx*2+1).first; ind2=findMax(l,r,(iL+iR)/2+1,iR,idx*2+1).second; if(ans1>ans2){ return {ans1,ind1}; }else{ if(ans2>ans1){ return {ans2,ind2}; }else{ return {ans1,max(ind1,ind2)}; } } } } } ll query(ll l,ll r,ll k,ll n){ //cout<<l<<" "<<r<<" "<<k<<" "<<n<<"\n"; if(l==r){ return 1; } ll intvMax=0,intvMaxind=0,intv2Max=0; intvMax=findMax(l,r,1,n,1).first; intvMaxind=findMax(l,r,1,n,1).second; if(w[r-1]==intvMax){ return query(l,r-1,k,n); } intv2Max=findMax(intvMaxind+1,r,1,n,1).first; //cout<<intvMax<<" "<<intvMaxind<<" "<<intv2Max<<"\n"; //system("pause"); if(intvMax+intv2Max>k){ return 0; }else{ if(intvMaxind==1)return 1; return query(l,intvMaxind-1,k,n); } } int main(){ ios_base::sync_with_stdio(false); cin.tie(0); ll n,m,bp=1; cin>>n>>m; for(int i=0;i<n;i++){ cin>>w[i]; } while(bp<n){ bp*=2; } for(int i=bp;i<=bp*2-1;i++){ if(i-bp<n){ segmMax[i]=w[i-bp]; segmInd[i]=i-bp+1; }else{ segmMax[i]=0; } } for(int i=bp-1;i>=1;i--){ if(segmMax[2*i]>segmMax[2*i+1]){ segmMax[i]=segmMax[2*i]; segmInd[i]=segmInd[2*i]; }else{ if(segmMax[2*i]<segmMax[2*i+1]){ segmMax[i]=segmMax[2*i+1]; segmInd[i]=segmInd[2*i+1]; }else{ segmMax[i]=segmMax[2*i+1]; segmInd[i]=max(segmInd[2*i+1],segmInd[2*i]); } } } for(int i=0;i<m;i++){ ll l,r,k; cin>>l>>r>>k; //ans[i]=query(l,r,k,bp); ans[i]=0; } for(int i=0;i<m;i++){ cout<<ans[i]<<"\n"; } return 0; }
#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...