Alex_tz307

Maxim si Minim in fereastra glisanta de lungime K

Sep 14th, 2020
131
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.43 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2.  
  3. using namespace std;
  4.  
  5. ifstream fin ("suita.in");
  6. ofstream fout ("suita.out");
  7.  
  8. int N, K, x, i, dif, cnt;
  9. deque < int > MAX, MIN, i_max, i_min;
  10.  
  11. int main() {
  12.   fin >> N >> K;
  13.   if (K == 1) {
  14.     fout << N << '\n';
  15.     fin.close();
  16.     fout.close();
  17.     return 0;
  18.   }
  19.   for (i = 0; i < K; i ++) {
  20.     fin >> x;
  21.     while (!i_max.empty() && !MAX.empty() && MAX.back() < x)
  22.       i_max.pop_back(), MAX.pop_back();
  23.     MAX.push_back (x);
  24.     i_max.push_back (i);
  25.     while (!i_min.empty() && !MIN.empty() && MIN.back() >= x)
  26.       i_min.pop_back(), MIN.pop_back();
  27.     MIN.push_back (x);
  28.     i_min.push_back (i);
  29.   }
  30.   dif = MAX.front() - MIN.front();
  31.   if (dif == K - 1)
  32.     cnt ++;
  33.   for (i = K; i < N; i ++) {
  34.     if (!i_max.empty() && !MAX.empty() && i_max.front() == i - K)
  35.       i_max.pop_front(), MAX.pop_front();
  36.     if (!i_min.empty() && !MIN.empty() && i_min.front() == i - K)
  37.       i_min.pop_front(), MIN.pop_front();
  38.     fin >> x;
  39.     while (!i_max.empty() && !MAX.empty() && MAX.back() < x)
  40.       i_max.pop_back(), MAX.pop_back();
  41.     MAX.push_back (x);
  42.     i_max.push_back (i);
  43.     while (!i_min.empty() && !MIN.empty() && MIN.back() >= x)
  44.       i_min.pop_back(), MIN.pop_back();
  45.     MIN.push_back (x);
  46.     i_min.push_back (i);
  47.     dif = MAX.front() - MIN.front();
  48.     if (dif == K - 1)
  49.       cnt ++;
  50.   }
  51.   fout << cnt << '\n';
  52.   fin.close();
  53.   fout.close();
  54.   return 0;
  55. }
  56.  
Advertisement
Add Comment
Please, Sign In to add comment