rcpl

This documentation is automatically generated by online-judge-tools/verification-helper

View the Project on GitHub ruthen71/rcpl

:heavy_check_mark: verify/aoj_dsl/aoj_dsl_3_d.test.cpp

Depends on

Code

#define PROBLEM "https://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=DSL_3_D"

#include <bits/stdc++.h>

#include "dp/sliding_window_minimum.hpp"

int main() {
    int N, L;
    std::cin >> N >> L;
    std::vector<int> a(N);
    for (int i = 0; i < N; i++) std::cin >> a[i];
    auto b = sliding_window_minimum(a, L);
    for (int i = 0; i < N - L + 1; i++) std::cout << b[i] << " \n"[i == N - L];
    return 0;
}
#line 1 "verify/aoj_dsl/aoj_dsl_3_d.test.cpp"
#define PROBLEM "https://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=DSL_3_D"

#include <bits/stdc++.h>

#line 2 "dp/sliding_window_minimum.hpp"

template <class T> std::vector<T> sliding_window_minimum(const std::vector<T> &a, const int k) {
    int n = (int)a.size();
    std::vector<T> res(n - k + 1);
    std::deque<T> deq;
    for (int i = 0; i < n; i++) {
        while (!deq.empty() and a[deq.back()] >= a[i]) deq.pop_back();
        deq.push_back(i);
        if (i - k + 1 >= 0) {
            res[i - k + 1] = a[deq.front()];
            if (deq.front() == i - k + 1) deq.pop_front();
        }
    }
    return res;
}
#line 6 "verify/aoj_dsl/aoj_dsl_3_d.test.cpp"

int main() {
    int N, L;
    std::cin >> N >> L;
    std::vector<int> a(N);
    for (int i = 0; i < N; i++) std::cin >> a[i];
    auto b = sliding_window_minimum(a, L);
    for (int i = 0; i < N - L + 1; i++) std::cout << b[i] << " \n"[i == N - L];
    return 0;
}
Back to top page