제출 #1361101

#제출 시각아이디문제언어결과실행 시간메모리
1361101retarde모임들 (IOI18_meetings)C++20
0 / 100
5591 ms2404 KiB
#include "meetings.h"
#include <bits/stdc++.h>
using namespace std;

vector<long long> A;

int solve(vector<int> &a) {
  int n = (int)a.size();
  vector<long long> lc(n), rc(n);
  vector<pair<long long, long long>> vals; // {value, index}
  for (int i = 0; i < n; i++) vals.push_back({a[i], i});
  sort(vals.begin(), vals.end()); reverse(vals.begin(), vals.end());
  set<int> in; in.insert(-1); in.insert(n);
  long long ans = 1e18;

  for (auto &vl : vals) {
    long long v = vl.first; int i = vl.second;
    auto lftit = in.lower_bound(i); lftit--;
    int lft = *lftit;
    auto rgtit = in.upper_bound(i); int rgt = *rgtit;

    lc[i] = (long long)(i - lft) * v + (lft != -1 ? lc[lft] : (long long)0);
    rc[i] = (long long)(rgt - i) * v + (rgt != n ? rc[rgt] : (long long)0);
    ans = min(ans, lc[i] + rc[i] - a[i]);
    in.insert(i);
  }
  
  return ans;
}

vector<long long> minimum_costs(std::vector<int> H, std::vector<int> L, std::vector<int> R) {
  int Q = (long long)L.size(); vector<long long> ans(Q);
  int N = (int)H.size(); A.resize(N); for (int i = 0; i < N; i++) A[i] = H[i];

  for (int j = 0; j < Q; ++j) {
    vector<int> b; for (int i = L[j]; i <= R[j]; i++) b.push_back(H[i]);
    ans[j] = solve(b);
  }
  return ans;
}
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…