CSES Solutions
#1077Sliding Window Problems

Sliding Window Cost

View on CSES

Solution

1077-Sliding_Window_Cost.cpp
1#include<bits/stdc++.h>
2using namespace std;
3#define int long long
4signed main(){
5  ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
6  int n,k; cin>>n>>k;
7  multiset<int> lf,rg;
8  int ls=0,rs=0;
9  auto add=[&](multiset<int>&ms,int&sm,int x){
10    ms.emplace(x);
11    sm+=x;
12  };
13  auto rem=[&](multiset<int>&ms,int&sm,int x){
14    ms.erase(ms.find(x));
15    sm-=x;
16  };
17  auto bal=[&](){
18    while(rg.size()>lf.size()) add(lf,ls,*rg.begin()),rem(rg,rs,*rg.begin());
19    while(lf.size()-rg.size()>1) add(rg,rs,*lf.rbegin()),rem(lf,ls,*lf.rbegin());
20  };
21  int a[n]; for(int i=0,res=0;i<n;++i){
22    cin>>a[i];
23    if(lf.size() && *lf.rbegin()<a[i]) add(rg,rs,a[i]);
24    else add(lf,ls,a[i]);
25    if(i>=k){
26      if(lf.size() && *lf.rbegin()<a[i-k]) rem(rg,rs,a[i-k]);
27      else rem(lf,ls,a[i-k]);
28    }
29    bal();
30    if(i>=k-1){
31      int m=*lf.rbegin();
32      cout<<m*lf.size()-ls+rs-m*rg.size()<<" ";
33    }
34  }
35  cout<<'\n';
36  return 0;
37}

Editorial not yet generated for this problem. Run the editorial generation script to add hints and detailed explanations.