Submission #1158562

#TimeUsernameProblemLanguageResultExecution timeMemory
1158562ereringMeetings (IOI18_meetings)C++20
19 / 100
5591 ms4416 KiB
#include <bits/stdc++.h>
using namespace std;
#include "meetings.h"
#define pb push_back
#define ll long long
vector<long long> minimum_costs(vector<int> H, vector<int> L,vector<int> R) {
  vector<long long> sol;
  for(int i=0;i<L.size();i++){
      deque<pair<ll,ll>> dq;
      ll sz=R[i]-L[i]+1;
      ll pref[sz],ans=H[L[i]];
      dq.pb({H[L[i]],1});
      pref[0]=ans;
      for(int j=L[i]+1;j<=R[i];j++){
          ll cnt=1;
          while(!dq.empty() && dq.back().first<=H[j]){
              ans-=dq.back().second*dq.back().first;
              cnt+=dq.back().second;
              dq.pop_back();
          }
          dq.pb({H[j],cnt});
          ans+=dq.back().first*dq.back().second;
          pref[j-L[i]]=ans;
      }
      ans=H[R[i]];
      dq.clear();
      dq.pb({H[R[i]],1});
      ll suff[sz],idx=sz-2;
      suff[sz-1]=H[R[i]];
      for(int j=R[i]-1;j>=L[i];j--){
          ll cnt=1;
          while(!dq.empty() && dq.front().first<=H[j]){
              ans-=dq.front().second*dq.front().first;
              cnt+=dq.front().second;
              dq.pop_front();
          }
          dq.push_front({H[j],cnt});
          ans+=dq.front().first*dq.front().second;
          suff[idx]=ans;
          idx--;
      }
      ll best=1e18,cnt=0;
      for(int j=L[i];j<=R[i];j++){
        //  if(i==0 && j==L[i])cout<<pref[cnt]<<" "<<suff[cnt]<<endl;
          best=min(best,pref[cnt]+suff[cnt]-H[j]);
          cnt++;
      }
      sol.pb(best);
  }
  return sol;
}
#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...