Advertisement
Augenbrauen

piloci 3

Feb 3rd, 2018
99
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 0.95 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2.  
  3. using namespace std;
  4. #define endl '\n'
  5.  
  6. vector<int> t;
  7.  
  8. struct kol_mon
  9. {
  10.     deque<int> kol;
  11.     int sz;
  12.     kol_mon(bool czy_min)
  13.     {
  14.         if(czy_min)
  15.             sz = -1;
  16.         else
  17.             sz = 1;
  18.     }
  19.    
  20.     void add(int i)
  21.     {
  22.         while(!kol.empty() && kol.back() < t[i] * sz)
  23.             kol.pop_back();
  24.         kol.emplace_back(t[i] * sz);
  25.     }
  26.     void remove(int i)
  27.     {
  28.         if(kol.front() == t[i] * sz)
  29.             kol.pop_front();
  30.     }
  31.     int get() { return kol.front() * sz; }
  32.  
  33.  
  34. };
  35.  
  36. int main()
  37. {
  38.     ios_base::sync_with_stdio(0);
  39.     cin.tie(0);
  40.  
  41.     int p, n;
  42.     cin >> p >> n;
  43.     t.resize(n);
  44.     kol_mon mini(1), maks(0);
  45.     for(int &i : t)
  46.         cin >> i;
  47.     int wynik = 1;
  48.     mini.add(0);
  49.     maks.add(0);
  50.     int i = 0, j = 0;
  51.     while(i != n)
  52.     {
  53.         while(j != n && maks.get() - mini.get() <= p)
  54.         {
  55.             maks.add(++j);
  56.             mini.add(++j);         
  57.             if(maks.get() - mini.get() <= p)
  58.                 wynik = max(wynik, i - j + 1);
  59.         }
  60.         maks.remove(i++);
  61.         mini.remove(i++);
  62.     }
  63.  
  64.     cout << wynik;
  65.  
  66. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement