Submission #1237341

#TimeUsernameProblemLanguageResultExecution timeMemory
1237341dostsMeetings (IOI18_meetings)C++20
19 / 100
632 ms369308 KiB
#include "meetings.h"
#include <bits/stdc++.h>
#pragma GCC optimize("O3,unroll-loops")
#pragma GCC target("avx2")
#define int long long
#define pii pair<int,int>
#define vi vector<int>
#define ff first
#define ss second
#define sp << " " <<
#define all(x) x.begin(),x.end()
#define big(x) ((int)(x.size()))
using namespace std;
const int MOD = 1e9+7, LIM = 5e3+1, inf = 2e9;
vi h;
pii mn[LIM][LIM];
int dnq(int l,int r) {
  if (l > r) return 0;  
  if (l == r) return h[l];
  int p = mn[l][r].ss;
  int he = mn[l][r].ff;
  return min((p-l+1)*he+dnq(p+1,r),(r-p+1)*he+dnq(l,p-1));
}


vi minimum_costs(std::vector<signed> H, std::vector<signed> L,
                                     std::vector<signed> R) {
  h = vector<int>(all(H));
  int n = big(H);
  for (int i = 0;i<n;i++) {
    mn[i][i] = {H[i],i};
    for (int j = i+1;j<n;j++) {
      if (h[j] > mn[i][j-1].ff) {
        mn[i][j].ff = h[j];
        mn[i][j].ss = j;
      }
      else mn[i][j] = mn[i][j-1];
    }
  }
  vi answer(big(L));
  for (int ii = 0;ii<big(L);ii++) {
    answer[ii] = dnq(L[ii],R[ii]);
  }
  return answer;
}
#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...