Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- using namespace std;
- const int N = 412345;
- int n, k;
- int v[N];
- int main() {
- scanf("%d %d", &n, &k);
- for (int i = 0; i < n; i++)
- scanf("%d", &v[i]);
- multiset<int> heap_min;
- multiset<int, greater<int>> heap_max;
- for (int i = 0; i < k; i++) {
- if (v[i] <= *heap_max.begin()) {
- heap_max.insert(v[i]);
- } else {
- heap_min.insert(v[i]);
- }
- if (heap_min.size() > heap_max.size()) {
- heap_max.insert(*heap_min.begin());
- heap_min.erase(heap_min.begin());
- } else if (heap_min.size() + 1 < heap_max.size()) {
- heap_min.insert(*heap_max.begin());
- heap_max.erase(heap_max.begin());
- }
- }
- int ans = *heap_max.begin();
- for (int i = k; i < n; i++) {
- if (*heap_max.begin() >= v[i-k]) {
- heap_max.erase(heap_max.find(v[i-k]));
- } else {
- heap_min.erase(heap_min.find(v[i-k]));
- }
- if (v[i] <= *heap_max.begin()) {
- heap_max.insert(v[i]);
- } else {
- heap_min.insert(v[i]);
- }
- while (heap_min.size() > heap_max.size()) {
- assert(not heap_min.empty());
- heap_max.insert(*heap_min.begin());
- heap_min.erase(heap_min.begin());
- }
- while (heap_min.size() + 1 < heap_max.size()) {
- assert(not heap_max.empty());
- heap_min.insert(*heap_max.begin());
- heap_max.erase(heap_max.begin());
- }
- ans = max(ans, *heap_max.begin());
- }
- printf("%d\n", ans);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement