diff --git a/Luogu/P1886/P1886.cpp b/Luogu/P1886/P1886.cpp index 10056389..43911d5a 100644 --- a/Luogu/P1886/P1886.cpp +++ b/Luogu/P1886/P1886.cpp @@ -1,35 +1,54 @@ -#include +#include +#include +#include -using namespace std; +using std::cin; +using std::cout; +const char endl = '\n'; -int n, k, a[1000005]; -deque q_min, q_max; -vector ans_min, ans_max; +const int N = 1e6 + 5; + +int n, k, a[N]; +std::deque q_min, q_max; +std::vector ans_min, ans_max; int main() { - scanf("%d%d", &n, &k); + std::ios::sync_with_stdio(false); + cin.tie(nullptr); + + cin >> n >> k; + for (int i = 1; i <= n; i++) { - scanf("%d", &a[i]); + cin >> a[i]; } + for (int i = 1; i <= n; i++) { - while (!q_max.empty() && a[q_max.back()] < a[i]) q_max.pop_back(); while (!q_min.empty() && a[q_min.back()] > a[i]) q_min.pop_back(); - q_max.push_back(i); - q_min.push_back(i); + while (!q_max.empty() && a[q_max.back()] < a[i]) q_max.pop_back(); + + q_min.emplace_back(i); + q_max.emplace_back(i); + if (q_min.front() < i - k + 1) q_min.pop_front(); if (q_max.front() < i - k + 1) q_max.pop_front(); + if (i >= k) { - ans_max.push_back(a[q_max.front()]); - ans_min.push_back(a[q_min.front()]); + ans_min.emplace_back(a[q_min.front()]); + ans_max.emplace_back(a[q_max.front()]); } } - for (int i = 0; i < ans_min.size(); i++) { - cout << ans_min[i] << ' '; + + for (int x : ans_min) { + cout << x << ' '; } + cout << endl; - for (int i = 0; i < ans_max.size(); i++) { - cout << ans_max[i] << ' '; + + for (int x : ans_max) { + cout << x << ' '; } + cout << endl; + return 0; }