Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- using namespace std;
- int cuttingTime(int N,int K,vector<int> &P){
- if(N==K)return 0;
- vector<int> dp(N);
- deque<pair<int,int>> dq;
- for(int i=0;i<=K;i++){
- dp[i] = P[i];
- while(!dq.empty() && dq.back().first>dp[i]){
- dq.pop_back();
- }
- dq.push_back({dp[i],i});
- }
- for(int i=K+1;i<N;i++){
- if(!dq.empty() && dq.front().second<i-K-1){
- dq.pop_front();
- }
- dp[i] = P[i] + dq.front().first;
- while(!dq.empty() && dq.back().first>dp[i]){
- dq.pop_back();
- }
- dq.push_back({dp[i],i});
- }
- int ans = 1000000000;
- for(int i = N-K-1;i<N;i++){
- ans = min(ans,dp[i]);
- }
- return ans;
- }
- int main()
- {
- int N;
- int K;
- cin>>N>>K;
- vector<int> P(N);
- for(int i=0;i<N;i++){
- cin>>P[i];
- }
- cout<<cuttingTime(N,K,P)<<endl;
- }
Advertisement
Add Comment
Please, Sign In to add comment