Advertisement
Guest User

Untitled

a guest
May 26th, 2017
68
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.63 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3.  
  4. const int N = 412345;
  5.  
  6. int n, k;
  7. int v[N];
  8.  
  9. int main() {
  10.     scanf("%d %d", &n, &k);
  11.     for (int i = 0; i < n; i++)
  12.         scanf("%d", &v[i]);
  13.     multiset<int> heap_min;
  14.     multiset<int, greater<int>> heap_max;
  15.     for (int i = 0; i < k; i++) {
  16.         if (v[i] <= *heap_max.begin()) {
  17.             heap_max.insert(v[i]);
  18.         } else {
  19.             heap_min.insert(v[i]);
  20.         }
  21.         if (heap_min.size() > heap_max.size()) {
  22.             heap_max.insert(*heap_min.begin());
  23.             heap_min.erase(heap_min.begin());
  24.         } else if (heap_min.size() + 1 < heap_max.size()) {
  25.             heap_min.insert(*heap_max.begin());
  26.             heap_max.erase(heap_max.begin());
  27.         }
  28.     }
  29.     int ans = *heap_max.begin();
  30.     for (int i = k; i < n; i++) {
  31.         if (*heap_max.begin() >= v[i-k]) {
  32.             heap_max.erase(heap_max.find(v[i-k]));
  33.         } else {
  34.             heap_min.erase(heap_min.find(v[i-k]));
  35.         }
  36.         if (v[i] <= *heap_max.begin()) {
  37.             heap_max.insert(v[i]);
  38.         } else {
  39.             heap_min.insert(v[i]);
  40.         }
  41.         while (heap_min.size() > heap_max.size()) {
  42.             assert(not heap_min.empty());
  43.             heap_max.insert(*heap_min.begin());
  44.             heap_min.erase(heap_min.begin());
  45.         }
  46.         while (heap_min.size() + 1 < heap_max.size()) {
  47.             assert(not heap_max.empty());
  48.             heap_min.insert(*heap_max.begin());
  49.             heap_max.erase(heap_max.begin());
  50.         }
  51.         ans = max(ans, *heap_max.begin());
  52.     }
  53.     printf("%d\n", ans);
  54.     return 0;
  55. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement