Submission #37913

#TimeUsernameProblemLanguageResultExecution timeMemory
37913Just_Solve_The_ProblemK blocks (IZhO14_blocks)C++11
0 / 100
16 ms12172 KiB
#include <bits/stdc++.h> using namespace std; #define ll long long const int N = (int)1e5 + 7; const ll linf = (ll)1e15 + 7; ll dp[2][N]; int ar[N]; int numlog[N]; int table[20][N]; int n; void buildtable () { for (int i = 2; i <= n; i++) { numlog[i] = numlog[i / 2] + 1; } for (int i = 0; i <= numlog[n]; i++) { int curlen = 1 << i; for (int j = 1; j <= n; j++) { if (i == 0) { table[i][j] = ar[j]; continue; } table[i][j] = max(table[i - 1][j], table[i - 1][j + curlen / 2]); } } } int get (int l, int r) { int curlog = numlog[r - l + 1]; return max(table[curlog][l], table[curlog][r - (1 << curlog) + 1]); } void div (int k, int l, int r, int optl, int optr) { if (l > r) return ; int mid = (l + r) >> 1; int opt = optl; for (int i = optl; i <= min(mid, optr); i++) { ll cur = dp[k & 1 ^ 1][i - 1] + get(i, mid); if (cur < dp[k & 1][mid]) { dp[k & 1][mid] = cur; opt = i; } } div(k, l, mid - 1, optl, opt); div(k, mid + 1, r, opt, optr); } main() { int k; scanf ("%d %d", &n, &k); for (int i = 1; i <= n; i++) { scanf ("%d", ar + i); } buildtable(); for (int i = 0; i <= n; i++) { for (int j = 0; j <= 1; j++) { dp[j][i] = linf; } } dp[0][0] = 0; // cout << get(1, n) << endl; for (int i = 1; i <= k; i++) { div(i, 1, n, 1, n); } // for (int i = 1; i <= n; i++) { // cout << dp[k & 1][i] << ' '; // } cout << dp[k & 1][n]; }

Compilation message (stderr)

blocks.cpp: In function 'void div(int, int, int, int, int)':
blocks.cpp:42:23: warning: suggest parentheses around arithmetic in operand of '^' [-Wparentheses]
         ll cur = dp[k & 1 ^ 1][i - 1] + get(i, mid);
                       ^
blocks.cpp: At global scope:
blocks.cpp:52:6: warning: ISO C++ forbids declaration of 'main' with no type [-Wreturn-type]
 main() {
      ^
blocks.cpp: In function 'int main()':
blocks.cpp:54:28: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
     scanf ("%d %d", &n, &k);
                            ^
blocks.cpp:56:29: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
         scanf ("%d", ar + i);
                             ^
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...