Submission #331358

#TimeUsernameProblemLanguageResultExecution timeMemory
331358loilon504K개의 묶음 (IZhO14_blocks)C++14
100 / 100
220 ms42212 KiB
/*#include <bits/stdc++.h> #define ll long long #define fi(i,a,b) for(int i=a; i<=b; i++) #define fid(i,a,b) for(int i=a; i>=b; i--) #define VanLoi "" #define gb(i, j) ((i >> j) & 1) #define MOD 1000000007 #define N 1000005 using namespace std; int n, k, a[N], f[105][N], top; struct pii { int F, S; } q[N]; int main() { ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); freopen(VanLoi".inp", "r", stdin); freopen(VanLoi".out", "w", stdout); cin >> n >> k; fi(i, 1, k) fi(j, 0, n) f[i][j] = 1e9; f[1][0] = 0; fi(i, 1, n) cin >> a[i], f[1][i] = max(f[1][i - 1], a[i]); f[1][0] = 1e9; fi(i, 2, k) { top = 0; q[0].S = 0; fi(j, 1, n) { int res = f[i - 1][j - 1]; while (top && a[q[top].S] <= a[j]) { res = min(res, q[top].F); top--; } f[i][j] = min(f[i][q[top].S], res + a[j]); q[++top] = {res, j}; } } cout << f[k][n]; return 0; }*/ #include <bits/stdc++.h> #define ll long long #define fi(i,a,b) for(int i=a; i<=b; i++) #define fid(i,a,b) for(int i=a; i>=b; i--) #define VanLoi "" #define gb(i, j) ((i >> j) & 1) #define MOD 1000000007 #define N 1000005 using namespace std; int n, k, a[N], f[105][N], l[N], mi[N]; int main() { ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); cin >> n >> k; fi(i, 1, k) fi(j, 0, n) f[i][j] = 1e9; f[1][0] = 0; fi(i, 1, n) cin >> a[i], f[1][i] = max(f[1][i - 1], a[i]); fi(i, 1, n) for(l[i] = i - 1; l[i] && a[l[i]] <= a[i]; ) l[i] = l[l[i]]; f[1][0] = 1e9; fi(i, 2, k) { mi[i - 1] = 1e9; fi(j, 1, n) { mi[j] = f[i - 1][j - 1]; for(int t = j - 1; t > l[j]; t = l[t]) mi[j] = min(mi[j], mi[t]); f[i][j] = min(f[i][l[j]], mi[j] + a[j]); } } cout << f[k][n]; return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...