Submission #171309

#TimeUsernameProblemLanguageResultExecution timeMemory
171309bgspartanHedgehog Daniyar and Algorithms (IZhO19_sortbooks)C++14
0 / 100
663 ms262144 KiB
#include<bits/stdc++.h> #define ll long long using namespace std; const ll maxN=1000001,INF=999999999999; ll w[maxN],ans[maxN]; queue<ll> intervals; vector<ll> mSortTree[4*maxN+4]; ll sCost[4*maxN+4]; ll tSize=1; ll mergeCost(ll ind1,ll ind2){ vector<ll> ::iterator lb; ll size1=mSortTree[ind1].size(); ll size2=mSortTree[ind2].size(); ll a1,a2,a3,a4; a1=mSortTree[ind1][0]; a2=mSortTree[ind1][size1-1]; a3=mSortTree[ind2][0]; a4=mSortTree[ind2][size2-1]; if(a4<a2){ return a2+a4; } if(a2<=a3){ return 0; } lb=lower_bound(mSortTree[ind2].begin(),mSortTree[ind2].end(),a2); ll indx=0; indx=lb-mSortTree[ind2].begin(); indx--; return a2+mSortTree[ind2][indx]; } void createTree(ll n){ while(tSize<n){ tSize*=2; } for(int i=tSize;i<tSize*2;i++){ if(i-tSize<n){ mSortTree[i].push_back(w[i-tSize]); }else{ mSortTree[i].push_back(INF); } sCost[i]=0; } for(int i=tSize-1;i>=1;i--){ merge(mSortTree[i*2].begin(),mSortTree[i*2].end(),mSortTree[i*2+1].begin(),mSortTree[i*2+1].end(),back_inserter(mSortTree[i])); sCost[i]=mergeCost(i*2,i*2+1); //cout<<i<<" "<<sCost[i]<<"\n"; sCost[i]=max(sCost[i],sCost[i*2]); sCost[i]=max(sCost[i],sCost[i*2+1]); } } void getIntervals(ll l,ll r,ll sl,ll sr,ll idx){ if(sl>r or sr<l){ }else{ if(sl>=l and sr<=r){ intervals.push(idx); }else{ ll mid=(sl+sr)/2; getIntervals(l,r,sl,mid,idx*2); getIntervals(l,r,mid+1,sr,idx*2+1); } } } ll query(ll l,ll r,ll n){ ll qAns=0; getIntervals(l,r,1,n,1); if(intervals.size()==1){ qAns=sCost[intervals.front()]; intervals.pop(); }else{ ll prev=intervals.front(),curr=0; qAns=sCost[prev]; intervals.pop(); while(intervals.empty()==false){ curr=intervals.front(); intervals.pop(); qAns=max(qAns,sCost[curr]); qAns=max(qAns,mergeCost(prev,curr)); prev=curr; } } return qAns; } int main(){ ios_base::sync_with_stdio(false); cin.tie(0); ll n,m,l,r,k; cin>>n>>m; for(int i=0;i<n;i++){ cin>>w[i]; } createTree(n); for(int i=0;i<m;i++){ cin>>l>>r>>k; if(query(l,r,tSize)>k){ ans[i]=0; }else{ ans[i]=1; } } for(int i=0;i<m;i++){ cout<<ans[i]<<"\n"; } return 0; }

Compilation message (stderr)

sortbooks.cpp: In function 'long long int mergeCost(long long int, long long int)':
sortbooks.cpp:16:5: warning: variable 'a1' set but not used [-Wunused-but-set-variable]
  ll a1,a2,a3,a4;
     ^~
#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...