Samkit5025

Untitled

Jun 19th, 2022
47
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 0.95 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3.  
  4. int cuttingTime(int N,int K,vector<int> &P){
  5.  
  6. if(N==K)return 0;
  7.  
  8. vector<int> dp(N);
  9. deque<pair<int,int>> dq;
  10.  
  11. for(int i=0;i<=K;i++){
  12. dp[i] = P[i];
  13. while(!dq.empty() && dq.back().first>dp[i]){
  14. dq.pop_back();
  15. }
  16. dq.push_back({dp[i],i});
  17. }
  18.  
  19. for(int i=K+1;i<N;i++){
  20. if(!dq.empty() && dq.front().second<i-K-1){
  21. dq.pop_front();
  22. }
  23.  
  24. dp[i] = P[i] + dq.front().first;
  25.  
  26. while(!dq.empty() && dq.back().first>dp[i]){
  27. dq.pop_back();
  28. }
  29. dq.push_back({dp[i],i});
  30. }
  31.  
  32. int ans = 1000000000;
  33. for(int i = N-K-1;i<N;i++){
  34. ans = min(ans,dp[i]);
  35. }
  36.  
  37. return ans;
  38. }
  39.  
  40. int main()
  41. {
  42. int N;
  43. int K;
  44. cin>>N>>K;
  45. vector<int> P(N);
  46. for(int i=0;i<N;i++){
  47. cin>>P[i];
  48. }
  49.  
  50. cout<<cuttingTime(N,K,P)<<endl;
  51. }
Advertisement
Add Comment
Please, Sign In to add comment