Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- using namespace std;
- #define fi first
- #define se second
- #define pb push_back
- #define all(x) (x).begin(), (x).end()
- #define rall(x) (x).rbegin(), (x).rend()
- #define dump(x) cerr << #x " = " << (x) << '\n'
- #define sz(x) ((int)(x).size())
- #define endl '\n'
- #ifdef _DEBUG27_
- //#define STRESS 1
- #endif
- typedef long long llong;
- const int INF = 2e9;
- const llong LINF = 2e18;
- void inv(bool e);
- template<typename T> T sign(T a);
- template<typename T> void die(T &a);
- template<typename T> void umax(T &a, T b);
- template<typename T> void umin(T &a, T b);
- bool brute, alter;
- int cnt_tests = 1;
- // testing fake / road to div1
- // Code below
- int n, k;
- vector<int> arr;
- void inp() {
- cin >> n >> k;
- arr.resize(n);
- for (int i = 0; i < n; i++) {
- cin >> arr[i];
- }
- }
- const int N = 2e5, SQRT = sqrt(N) + 2;
- int decmp[SQRT], bsize;
- int num(int x) {
- return x / bsize;
- }
- int get(int l, int r) {
- int ans = INF;
- for (int i = l; i <= r; i++) {
- if (i == bsize * num(i) && i + bsize < r) {
- umin(ans, decmp[num(i)]);
- i += bsize - 1;
- } else {
- umin(ans, arr[i]);
- }
- }
- return ans;
- }
- void solve() {
- bsize = 1 + sqrt((double) n);
- for (int i = 0; i < SQRT; i++) {
- decmp[i] = INF;
- }
- for (int i = 0; i < n; i++) {
- umin(decmp[num(i)], arr[i]);
- }
- for (int i = 0; i + k - 1 < n; i++) {
- cout << get(i, i + k - 1) << ' ';
- }
- }
- void stress() {
- }
- void naive() {
- }
- void run();
- int main() {
- #ifdef _DEBUG27_
- if (1)
- freopen("input.txt", "r", stdin);
- #else
- ios_base::sync_with_stdio(false);
- cin.tie(0);
- cout.tie(0);
- if (0) {
- freopen("polygon.in", "r", stdin);
- freopen("polygon.out", "w", stdout);
- }
- #endif
- srand(time(0));
- #ifdef STRESS
- brute = true;
- #else
- brute = false;
- #endif
- for (int i = 0; (i < cnt_tests); i++) {
- run();
- }
- cerr << endl << "Time: " << clock() / 1000.0 << " ms";
- return 0;
- }
- void run() {
- if (!brute) {
- inp();
- }
- else {
- stress();
- }
- solve();
- cout << endl;
- }
- template<typename T>
- void die(T &a) {
- cout << a;
- exit(0);
- }
- template<typename T>
- T sign(T a) {
- if (a == 0)
- return 0;
- if (a < 0)
- return -1;
- return 1;
- }
- template<typename T>
- void umax(T &a, T b) {
- if (b > a)
- a = b;
- }
- template<typename T>
- void umin(T &a, T b) {
- if (b < a)
- a = b;
- }
- void inv(bool e) {
- if (!e) {
- vector<int> a;
- a[-1] += 1;
- }
- }
- /** CLEARING BUFFER
- cout << VAL << flush;
- OR
- printf(VAL);
- fflush(stdout);
- */
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement