제출 #1175913

#제출 시각아이디문제언어결과실행 시간메모리
1175913NewtonabcHedgehog Daniyar and Algorithms (IZhO19_sortbooks)C++20
0 / 100
1393 ms25972 KiB
#include<bits/stdc++.h> #define pii pair<int,int> using namespace std; const int N=1<<21; int s[N],w[N],ans[N]; vector<pair<pii,pii>> qr; bool cp(const pair<pii,pii>&a,const pair<pii,pii>&b){ return a.first.second<b.first.second; } void update(int l,int r,int idx,int a,int b){ if(a<l || a>r) return; if(l==r){ s[idx]=max(s[idx],b); return; } int m=(l+r)/2; update(l,m,idx*2+1,a,b); update(m+1,r,idx*2+1,a,b); s[idx]=max(s[idx*2],s[idx*2+1]); } int query(int l,int r,int idx,int a,int b){ if(b<l || a>r) return INT_MIN; if(a<=l && b>=r) return s[idx]; int m=(l+r)/2; return max(query(l,m,idx*2,a,b),query(m+1,r,idx*2+1,a,b)); } int main(){ int n,m; cin>>n >>m; for(int i=1;i<=n;i++) cin>>w[i]; for(int i=0;i<m;i++){ int a,b,c,d; cin>>a >>b >>c; qr.push_back({{a,b},{c,i}}); } stack<pii> st; //sort by r sort(qr.begin(),qr.end(),cp); int prev=0; for(int i=0;i<m;i++){ auto [pa,pb]=qr[i]; auto [l,r]=pa; auto [k,idx]=pb; for(int j=prev+1;j<=r;j++){ //update w[j]+(top of stack) to top of stack index if(st.empty()){ st.push({w[j],j}); continue; } while(!st.empty() && st.top().first<=w[j]) st.pop(); if(!st.empty()) update(1,n,1,st.top().second,st.top().first+w[j]); st.push({w[j],j}); } prev=r; ans[idx]=query(1,n,1,l,r)<=k; } for(int i=0;i<m;i++) cout<<ans[i] <<"\n"; }
#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...