Advertisement
saurav_kalsoor

Untitled

Jun 22nd, 2022
876
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 1.45 KB | None | 0 0
  1. import java.util.*;
  2.  
  3. public class Solution {
  4.    
  5.     static Scanner sc = new Scanner(System.in);
  6.  
  7.    
  8.     public static int cuttingTime(int N,int K,int[] P){
  9.         if(N==K)return 0;
  10.        
  11.         int[] dp = new int[N];
  12.        
  13.         Deque<Integer> dqcost = new LinkedList<>();
  14.         Deque<Integer> dqindex = new LinkedList<>();
  15.        
  16.         for(int i=0;i<=K;i++) {
  17.             dp[i] = P[i];
  18.            
  19.             while(!dqcost.isEmpty() && dqcost.getLast()>dp[i]) {
  20.                 dqcost.remove();
  21.                 dqindex.remove();
  22.             }
  23.            
  24.             dqcost.add(dp[i]);
  25.             dqindex.add(i);
  26.         }
  27.        
  28.         for(int i =K+1;i<N;i++) {
  29.             if(!dqindex.isEmpty() && dqindex.getFirst()<i-K-1) {
  30.                 dqcost.remove();
  31.                 dqindex.remove();
  32.             }
  33.            
  34.             dp[i] = P[i] + dqcost.getFirst();
  35.             while(!dqcost.isEmpty() && dqcost.getLast()>dp[i]) {
  36.                 dqcost.remove();
  37.                 dqindex.remove();
  38.             }
  39.            
  40.             dqcost.add(dp[i]);
  41.             dqindex.add(i);
  42.         }
  43.        
  44.         int ans = 10000000;
  45.        
  46.         for(int i=N-K-1;i<N;i++) {
  47.             if(ans > dp[i]) {
  48.                 ans = dp[i];
  49.             }
  50.         }
  51.        
  52.         return ans;
  53.     }
  54.    
  55.     public static void main(String[] args) {
  56.         int N,K;
  57.         N = sc.nextInt();
  58.         K = sc.nextInt();
  59.        
  60.         int[] P = new int[N];
  61.        
  62.         for(int i = 0;i<N;i++) {
  63.             P[i] = sc.nextInt();
  64.            
  65.         }
  66.        
  67.         System.out.println(cuttingTime(N,K,P));
  68.     }
  69. }
  70.  
  71.  
  72.  
  73.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement