Submission #870348

# Submission time Handle Problem Language Result Execution time Memory
870348 2023-11-07T13:20:42 Z truongdoan2012 K blocks (IZhO14_blocks) C++17
0 / 100
13 ms 88148 KB
#include <bits/stdc++.h>

using namespace std;

#ifdef LOCAL
#include "algo/debug.h"
#else
#define debug(...) 42
#endif

using i64 = long long;

struct Tree {
  typedef i64 T;
  static constexpr T unit = LLONG_MAX;
  T f(T a, T b) { return min(a, b); } // (any associative fn)
  vector<T> s;
  int n;
  Tree(int n = 0, T def = unit) : s(2 * n, def), n(n) {}
  void update(int pos, T val) {
    for (s[pos += n] = val; pos /= 2;)
      s[pos] = f(s[pos * 2], s[pos * 2 + 1]);
  }
  T query(int b, int e) { // query [b, e)
    T ra = unit, rb = unit;
    for (b += n, e += n; b < e; b /= 2, e /= 2) {
      if (b % 2)
        ra = f(ra, s[b++]);
      if (e % 2)
        rb = f(s[--e], rb);
    }
    return f(ra, rb);
  }
};

const int N = 1e5 + 10;
i64 dp[N][110]; // min val khi chia i phan tu vao j nhom
i64 a[N], pm[N];

void solve() {
  int n, k;
  cin >> n >> k;
  for (int i = 1; i <= n; i++) {
    cin >> a[i];
    pm[i] = max(pm[i - 1], a[i]);
  }
  memset(dp, 127, sizeof dp);
  for (int i = 1; i <= n; i++) {
    dp[i][1] = pm[i];
  }
  vector<int> l(n + 10);
  {
    stack<int> st;
    for (int i = 1; i <= n; i++) {
      while (!st.empty() && a[st.top()] <= a[i]) {
        st.pop();
      }
      if (st.empty())
        l[i] = 1;
      else
        l[i] = st.top();
    }
  }
  for (int j = 2; j <= k; j++) {
    Tree st(n + 10);
    for (int i = 1; i <= n; i++) {
      st.update(i, dp[i][j - 1]);
    }
    for (int i = 1; i <= n; i++) {
      dp[i][j] = min(dp[i][j], st.query(l[i], i) + a[i]);
    }
  }
  cout << dp[n][k];
}

int main() {
  cin.tie(nullptr)->sync_with_stdio(false);
  int TC = 1;
  // cin >> TC;
  while (TC--) {
    solve();
  }
}
# Verdict Execution time Memory Grader output
1 Correct 13 ms 87900 KB Output is correct
2 Correct 12 ms 87872 KB Output is correct
3 Correct 11 ms 87896 KB Output is correct
4 Correct 12 ms 87896 KB Output is correct
5 Correct 11 ms 88148 KB Output is correct
6 Correct 11 ms 87900 KB Output is correct
7 Correct 11 ms 87900 KB Output is correct
8 Correct 11 ms 87800 KB Output is correct
9 Incorrect 11 ms 87900 KB Output isn't correct
10 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 11 ms 87872 KB Output is correct
2 Correct 11 ms 87896 KB Output is correct
3 Correct 13 ms 87956 KB Output is correct
4 Correct 11 ms 87900 KB Output is correct
5 Correct 11 ms 87900 KB Output is correct
6 Correct 11 ms 87912 KB Output is correct
7 Correct 11 ms 87900 KB Output is correct
8 Correct 10 ms 87896 KB Output is correct
9 Incorrect 11 ms 87896 KB Output isn't correct
10 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 13 ms 87900 KB Output is correct
2 Correct 12 ms 87872 KB Output is correct
3 Correct 11 ms 87896 KB Output is correct
4 Correct 12 ms 87896 KB Output is correct
5 Correct 11 ms 88148 KB Output is correct
6 Correct 11 ms 87900 KB Output is correct
7 Correct 11 ms 87900 KB Output is correct
8 Correct 11 ms 87800 KB Output is correct
9 Incorrect 11 ms 87900 KB Output isn't correct
10 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 13 ms 87900 KB Output is correct
2 Correct 12 ms 87872 KB Output is correct
3 Correct 11 ms 87896 KB Output is correct
4 Correct 12 ms 87896 KB Output is correct
5 Correct 11 ms 88148 KB Output is correct
6 Correct 11 ms 87900 KB Output is correct
7 Correct 11 ms 87900 KB Output is correct
8 Correct 11 ms 87800 KB Output is correct
9 Incorrect 11 ms 87900 KB Output isn't correct
10 Halted 0 ms 0 KB -