Guest User

Cancer

a guest
Nov 21st, 2020
720
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 0.94 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. #define fr(i, n, m) for(int i = (n); i < (m); i ++)
  3.  
  4. using namespace std;
  5. typedef long long ll;
  6. const int mxn = 2e5;
  7.  
  8. int n, k;
  9. ll a[mxn];
  10. ll pre[mxn];
  11.  
  12.  
  13. ll dp[mxn];
  14. int cn[mxn];
  15.  
  16. void f(ll lambda){
  17. dp[0] = 0;
  18. cn[0] = 0;
  19. int l = 1;
  20. fr(i, 1, n+1){
  21. ll mi = 2e18;
  22. fr(j, l, i+1){
  23. ll cv = dp[j-1] + (pre[i]-pre[j-1])*(i-j) + lambda;
  24. if(cv < mi){
  25. mi = cv;
  26. l = j;
  27. cn[i] = cn[j-1]+1;
  28. }
  29. else if(cv == mi){
  30. if(cn[j-1]+1 <= cn[i]) l = j;
  31. cn[i] = min(cn[i], cn[j-1]+1);
  32. }
  33.  
  34. }
  35. dp[i] = mi;
  36. }
  37. }
  38.  
  39. ll solve(){
  40. ll l = 0, r = 1e18;
  41. ll ans = 0;
  42. while(l < r){
  43. ll mid = (l+r)/2;
  44. f(mid);
  45. if(cn[n] > k){
  46. ans = mid;
  47. l = mid+1;
  48. }
  49. else{
  50. r = mid;
  51. }
  52. }
  53. ++ans;
  54. f(ans);
  55. return dp[n]-k*ans;
  56. }
  57.  
  58.  
  59.  
  60. int main(){
  61. cin >> n >> k;
  62. fr(i, 1, n+1){
  63. cin >> a[i];
  64. }
  65. fr(i, 1, n+1){
  66. pre[i] = pre[i-1] + a[i];
  67. }
  68. cout<<solve();
  69. }
  70.  
Advertisement
Add Comment
Please, Sign In to add comment