Advertisement
Guest User

Untitled

a guest
Feb 24th, 2018
81
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.56 KB | None | 0 0
  1. #pragma comment(linker, "/stack:200000000")
  2. #pragma GCC optimize("Ofast")
  3. #pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,tune=native")
  4.  
  5. #include <bits/stdc++.h>
  6. #define MOD 1000000007
  7.  
  8. using namespace std;
  9.  
  10. typedef unsigned long long ll;
  11. typedef pair< int , int > PII;
  12.  
  13. int n, m;
  14.  
  15. struct SegTree{
  16. struct Node{
  17. ll mn;
  18. };
  19.  
  20. vector < Node > T;
  21.  
  22. void Init(int node, int st, int dr, ll a[]){
  23. if (st == dr){
  24. T[node].mn = a[st];
  25. }else{
  26. int mid = (st + dr) >> 1;
  27. Init(node << 1, st, mid, a);
  28. Init(node << 1 | 1, mid + 1, dr, a);
  29. T[node].mn = Pull(T[node << 1 | 1], T[node << 1]);
  30. }
  31. }
  32.  
  33. ll Pull(Node A, Node B){
  34. return min(A.mn, B.mn);
  35. }
  36.  
  37. SegTree(ll a[], int n) : T(4 * n + 200) {
  38. Init(1, 1, n, a);
  39. }
  40.  
  41. ll Query(int node, int st, int dr, int le, int ri){
  42. if (st > ri || dr < le){
  43. return LLONG_MAX;
  44. }
  45.  
  46. if (st >= le && dr <= ri){
  47. return T[node].mn;
  48. }
  49.  
  50. int mid = (st + dr) >> 1;
  51. ll A = Query(node << 1, st, mid, le, ri);
  52. ll B = Query(node << 1 | 1, mid + 1, dr, le, ri);
  53. return min(A, B);
  54. }
  55. };
  56.  
  57. ll dp[100100], sum[100100], a[100100];
  58.  
  59. int main(){
  60. ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
  61. cin >> n >> m;
  62.  
  63. for (int i = 1; i <= n; i++){
  64. cin >> a[i];
  65. sum[i] = a[i] + sum[i - 1];
  66. dp[i] = LLONG_MAX;
  67. }
  68.  
  69. SegTree tree(a, n);
  70.  
  71. for (int i = 1; i <= n; i++){
  72. dp[i] = dp[i - 1] + a[i];
  73. if (i >= m) dp[i] = min(dp[i], dp[i - m] + sum[i] - sum[i - m] + tree.Query(1, 1, n, i - m + 1, i));
  74. }
  75.  
  76. cout << dp[n];
  77. return 0;
  78. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement