Submission #614075

#TimeUsernameProblemLanguageResultExecution timeMemory
614075chirathnirodhaMeetings (IOI18_meetings)C++17
0 / 100
5568 ms6904 KiB
#include "meetings.h"
#include<bits/stdc++.h>
using namespace std;
#define PB push_back
#define MP make_pair 
#define F first 
#define S second 
#define P push 
typedef long long ll;


vector<ll> minimum_costs(vector<int> H, vector<int> L,vector<int> R) {
  int n,q;
  n=H.size();q=L.size();
  vector<ll> C;
  for(int h=0;h<q;h++){
    ll ans=INT64_MAX;
    ll vall[n],valr[n];

    vector<int> v;
    ll cur=H[L[h]];vall[L[h]]=cur;
    v.PB(L[h]);
    for(int i=L[h]+1;i<=R[h];i++){
      while(!v.empty()){
        int last=v.back();
        if(H[last]>=H[i])break;
        v.pop_back();
        if(v.empty())cur+=(H[i]-H[last])*(last-L[h]+1);
        else cur+=(H[i]-H[last])*(last-v.back());
      }
      v.PB(i);cur+=H[i];
      vall[i]=cur;
    }

    v.clear();
    cur=H[R[h]];valr[R[h]]=cur;
    v.PB(R[h]);
    for(int i=R[h]-1;i>=L[h];i--){
      while(!v.empty()){
        int last=v.back();
        if(H[last]>=H[i])break;
        v.pop_back();
        if(v.empty())cur+=(H[i]-H[last])*(R[h]-last+1);
        else cur+=(H[i]-H[last])*(v.back()-last);
      }
      v.PB(i);cur+=H[i];
      valr[i]=cur;
    }
    for(int i=L[h];i<=R[h];i++){
      ans=min(ans,vall[i]+valr[i]-(ll)H[i]);
    }
    C.PB(ans);
  }
  return C;
}
#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...