Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- using namespace std;
- ifstream fin ("suita.in");
- ofstream fout ("suita.out");
- int N, K, x, i, dif, cnt;
- deque < int > MAX, MIN, i_max, i_min;
- int main() {
- fin >> N >> K;
- if (K == 1) {
- fout << N << '\n';
- fin.close();
- fout.close();
- return 0;
- }
- for (i = 0; i < K; i ++) {
- fin >> x;
- while (!i_max.empty() && !MAX.empty() && MAX.back() < x)
- i_max.pop_back(), MAX.pop_back();
- MAX.push_back (x);
- i_max.push_back (i);
- while (!i_min.empty() && !MIN.empty() && MIN.back() >= x)
- i_min.pop_back(), MIN.pop_back();
- MIN.push_back (x);
- i_min.push_back (i);
- }
- dif = MAX.front() - MIN.front();
- if (dif == K - 1)
- cnt ++;
- for (i = K; i < N; i ++) {
- if (!i_max.empty() && !MAX.empty() && i_max.front() == i - K)
- i_max.pop_front(), MAX.pop_front();
- if (!i_min.empty() && !MIN.empty() && i_min.front() == i - K)
- i_min.pop_front(), MIN.pop_front();
- fin >> x;
- while (!i_max.empty() && !MAX.empty() && MAX.back() < x)
- i_max.pop_back(), MAX.pop_back();
- MAX.push_back (x);
- i_max.push_back (i);
- while (!i_min.empty() && !MIN.empty() && MIN.back() >= x)
- i_min.pop_back(), MIN.pop_back();
- MIN.push_back (x);
- i_min.push_back (i);
- dif = MAX.front() - MIN.front();
- if (dif == K - 1)
- cnt ++;
- }
- fout << cnt << '\n';
- fin.close();
- fout.close();
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment