/*
// Sample code to perform I/O:
#include <iostream>
using namespace std;
int main() {
int num;
cin >> num; // Reading input from STDIN
cout << "Input number is " << num << endl; // Writing output to STDOUT
}
// Warning: Printing unwanted or ill-formatted data to output will cause the test cases to fail
*/
// Write your code here
#include<bits/stdc++.h>
using namespace std;
long int min_cost(int n,int k,int *a){
long int cost = 0;
deque<int> negative_indices;
vector<int> postive_indices;
//indexes of negative value
for(int i=0;i<n;i++)
if(a[i]<0)
negative_indices.push_back(i);
else
postive_indices.push_back(i);
int neg_size = negative_indices.size();
int pos_size = negative_indices.size();
if(pos_size==0||neg_size==0){
for(int i=0;i<n;i++)
cost+=abs(a[i]);
return cost;
}
for(int i:postive_indices){
for(int j:negative_indices){
if(a[i]<=0||i+k<j)
break;
if(a[j]>=0 || abs(i-j)>k){
if(a[j]>=0)
negative_indices.pop_front();
continue;
}
int sub = min(a[i],-a[j]);
a[i] -= sub;
a[j] += sub;
}
}
for(int i=0;i<n;i++)
cost+=abs(a[i]);
return cost;
}
int main(){
int n,k;
cin>>n>>k;
int a[n];
for(int i=0;i<n;i++)
cin>>a[i];
cout<<min_cost(n, k, a)<<'\n';
return 0;
}
Language: C++17