Advertisement
mickypinata

PROG-T1157: Electricity

Aug 1st, 2020
147
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 0.69 KB | None | 0 0
  1. #include <iostream>
  2. #include <queue>
  3. using namespace std;
  4.  
  5. using pii = pair<int, int>;
  6. using lli = long long;
  7. const int N = 500010;
  8.  
  9. int A[N];
  10. lli dp[N];
  11.  
  12. int main() {
  13.  
  14.     int n, k;
  15.     scanf("%d", &n);
  16.     scanf("%d", &k);
  17.     for(int i = 1; i <= n; ++i){
  18.         scanf("%d", &A[i]);
  19.     }
  20.  
  21.     priority_queue<pii, vector<pii>, greater<pii>> Q;
  22.     dp[1] = A[1];
  23.     for(int i = 2; i <= n; ++i) {
  24.         // push pop ... // dp[i] = min(dp[i-k..i-1])
  25.         Q.push(make_pair(dp[i - 1], i - 1));
  26.         while(!Q.empty() && Q.top().second < i - k){
  27.             Q.pop();
  28.         }
  29.         dp[i] = Q.top().first + A[i];
  30.     }
  31.  
  32.     printf("%d\n", dp[n]);
  33.  
  34.     return 0;
  35. }
  36.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement