Advertisement
Josif_tepe

Untitled

Feb 3rd, 2023
819
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.03 KB | None | 0 0
  1. #include <iostream>
  2. #include <queue>
  3. #include <cstring>
  4. #include <stack>
  5. #include <fstream>
  6. #include <set>
  7. using namespace std;
  8. typedef long long ll;
  9. const int maxn = 2e5 + 10;
  10. int n, k;
  11. int arr[maxn];
  12. multiset<int> lower_values, greater_values;
  13.  
  14. void insert_value(int x) {
  15.     int max_lower_value = *lower_values.rbegin();
  16.    
  17.     if(max_lower_value < x) {
  18.         greater_values.insert(x);
  19.         if(greater_values.size() > k / 2) {
  20.             int smallest_greater = *greater_values.begin();
  21.             lower_values.insert(smallest_greater);
  22.             greater_values.erase(greater_values.find(smallest_greater));
  23.         }
  24.     }
  25.     else {
  26.         lower_values.insert(x);
  27.         if(lower_values.size() > (k + 1) / 2) {
  28.             int max_in_lower = *lower_values.rbegin();
  29.             greater_values.insert(max_in_lower);
  30.             lower_values.erase(lower_values.find(max_in_lower));
  31.         }
  32.     }
  33. }
  34. void remove_element(int x) {
  35.     if(greater_values.find(x) != greater_values.end()) {
  36.         greater_values.erase(greater_values.find(x));
  37.     }
  38.     else if(lower_values.find(x) != lower_values.end()) {
  39.         lower_values.erase(lower_values.find(x));
  40.     }
  41.    
  42.     if(lower_values.empty()) {
  43.         int smallest_in_greater = *greater_values.begin();
  44.         lower_values.insert(smallest_in_greater);
  45.         greater_values.erase(greater_values.find(smallest_in_greater));
  46.     }
  47. }
  48. int main() {
  49.     ios_base::sync_with_stdio(false);
  50.     cin >> n >> k;
  51.    
  52.     for(int i = 0; i < n; i++) {
  53.         cin >> arr[i];
  54.     }
  55.    
  56.     lower_values.insert(arr[0]);
  57.     for(int i = 1; i < k; i++) {
  58.         insert_value(arr[i]);
  59.     }
  60.     cout << *lower_values.rbegin() << " ";
  61.    
  62.     for(int i = k; i < n; i++){
  63.         if(k > 1) {
  64.             remove_element(arr[i - k]);
  65.             insert_value(arr[i]);
  66.         }
  67.         else {
  68.             insert_value(arr[i]);
  69.             remove_element(arr[i - 1]);
  70.         }
  71.        
  72.         cout << *lower_values.rbegin() << " " ;
  73.     }
  74.     return 0;
  75. }
  76.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement