Submission #759757

#TimeUsernameProblemLanguageResultExecution timeMemory
759757alexander707070Meetings (IOI18_meetings)C++14
19 / 100
5578 ms5884 KiB
#include<bits/stdc++.h> #define MAXN 100007 using namespace std; const int inf=1e9+7; int n,h[MAXN],q,l,r,mins; long long res[MAXN],curr; vector< pair<int,int> > st; vector<long long> ans; vector<long long> minimum_costs(vector<int> H,vector<int> L,vector<int> R){ n=int(H.size()); q=int(L.size()); for(int i=1;i<=n;i++){ h[i]=H[i-1]; } for(int i=0;i<q;i++){ l=L[i]+1; r=R[i]+1; st.clear(); curr=0; st.push_back({inf,l-1}); for(int f=l;f<=r;f++){ while(h[f]>=st.back().first){ curr-=(long long) st.back().first*(st.back().second-st[st.size()-2].second); st.pop_back(); } curr+=(long long) h[f]*(f-st.back().second); res[f]=curr; st.push_back({h[f],f}); } st.clear(); curr=0; st.push_back({inf,r+1}); for(int f=r;f>=l;f--){ while(h[f]>=st.back().first){ curr-=(long long) st.back().first*(-st.back().second+st[st.size()-2].second); st.pop_back(); } curr+=(long long) h[f]*(st.back().second-f); res[f]+=curr-h[f]; st.push_back({h[f],f}); } mins=l; for(int f=l+1;f<=r;f++){ if(res[f]<res[mins])mins=f; } ans.push_back(res[mins]); } return ans; } /* int main(){ minimum_costs({2, 4, 3, 5}, {0, 1}, {2, 3}); for(int i=0;i<ans.size();i++){ cout<<ans[i]<<" "; } } */
#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...