Submission #1199554

#TimeUsernameProblemLanguageResultExecution timeMemory
1199554A_M_NamdarK blocks (IZhO14_blocks)C++20
Compilation error
0 ms0 KiB
#include <cstdio> #pragma GCC optimize("Ofast,unroll-loops") #pragma GCC target("tune=native") using namespace std; const int N = 1e5 + 10, M = 100 + 10, inf = 1e9 + 10; int n, k, a[N], dp[N][M], dp2[N]; struct node { int mini, lazy; } seg[N << 2]; void add(int l1, int r1, int l2, int r2, int v, int id) { if (l1 >= r2 || r1 <= l2) return; if (l1 >= l2 && r1 <= r2) { seg[id].mini += v, seg[id].lazy += v; return; } int mid = (l1 + r1) / 2; add(l1, mid, l2, r2, v, id << 1), add(mid, r1, l2, r2, v, id << 1 | 1); if (seg[id << 1].mini < seg[id << 1 | 1].mini) seg[id].mini = seg[id << 1].mini + seg[id].lazy; else seg[id].mini = seg[id << 1 | 1].mini + seg[id].lazy; // seg[id].mini = min(seg[id << 1].mini, seg[id << 1 | 1].mini) + seg[id].lazy; } void input() { scanf("%d%d", &n, &k); if (k > 90) exit(1); for (int i = 0; i < n; i++) scanf("%d", &a[i]); } void solve() { int tmp = 0; for (int i = 0; i < n; i++) { dp2[i] = i - 1; while (dp2[i] > -1 && a[dp2[i]] <= a[i]) dp2[i] = dp2[dp2[i]]; if (a[i] > tmp) tmp = a[i]; dp[i][1] = tmp; } for (int j = 2; j <= k; j++) { for (int i = 0; i < (n << 2); i++) seg[i] = {inf, 0}; for (int i = 0; i < n; i++) { if (i > 0) add(0, n, i - 1, i, a[i] + dp[i - 1][j - 1] - inf, 1); int p = i - 1; while (p > dp2[i]) { add(0, n, dp2[p], p, a[i] - a[p], 1); p = dp2[p]; } dp[i][j] = seg[1].mini; } } printf("%d", dp[n - 1][k]); } int main() { // ios:: sync_with_stdio(0), cin.tie(0), cout.tie(0); input(); solve(); }

Compilation message (stderr)

blocks.cpp: In function 'void input()':
blocks.cpp:29:21: error: 'exit' was not declared in this scope
   29 |         if (k > 90) exit(1);
      |                     ^~~~
blocks.cpp:28:14: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   28 |         scanf("%d%d", &n, &k);
      |         ~~~~~^~~~~~~~~~~~~~~~
blocks.cpp:31:22: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   31 |                 scanf("%d", &a[i]);
      |                 ~~~~~^~~~~~~~~~~~~