CSES Solutions
#1076Sliding Window Problems

Sliding Window Median

View on CSES

Solution

1076-Sliding_Window_Median.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 a[n]; for(int i=0,res=0;i<n;++i){
9    cin>>a[i];
10    if(lf.size() && *lf.rbegin()<a[i]) rg.emplace(a[i]);
11    else lf.emplace(a[i]);
12    while(rg.size()>lf.size()) lf.emplace(*rg.begin()),rg.erase(rg.begin());
13    while(lf.size()-rg.size()>1) rg.emplace(*lf.rbegin()),lf.erase(lf.find(*lf.rbegin()));
14    if(i>=k){
15      if(lf.size() && *lf.rbegin()<a[i-k]) rg.erase(rg.find(a[i-k]));
16      else lf.erase(lf.find(a[i-k]));
17      while(rg.size()>lf.size()) lf.emplace(*rg.begin()),rg.erase(rg.begin());
18      while(lf.size()-rg.size()>1) rg.emplace(*lf.rbegin()),lf.erase(lf.find(*lf.rbegin()));
19    }
20    if(i>=k-1) cout<<*lf.rbegin()<<" ";
21  }
22  cout<<'\n';
23  return 0;
24}

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