不会单调队列,直接暴力模拟。

蒙一勾股之父——王皓  •  8个月前


#include <bits/stdc++.h>
using namespace std;

const int N = 1000050;

int n, k;
long long a[N];
long long maxn = -2147483650, minn = 2147483650, mmax[N], mmin[N];

int main() {
	scanf("%d%d", &n, &k);
	for (int i = 1; i <= n; i++) {
		scanf("%lld", &a[i]);
		if (i <= k && maxn < a[i]) {
			maxn = a[i];
		}
		if (i <= k && minn > a[i]) {
			minn = a[i];
		}
	}
	mmin[1] = minn;
	mmax[1] = maxn;
	for (int i = 2; i <= n - k + 1; i++) {
		if (a[i - 1] == minn || a[i - 1] == maxn) {
			maxn = -2147483650;
			minn = 2147483650;
			for (int j = 0; j < k; j++) {
				if (maxn < a[j + i]) {
					maxn = a[j + i];
				}
				if (minn > a[j + i]) {
					minn = a[j + i];
				}
			}
			mmin[i] = minn;
			mmax[i] = maxn;
		} else {
			if (maxn < a[i + k - 1]) {
				maxn = a[i + k - 1];
			}
			if (minn > a[i + k - 1]) {
				minn = a[i + k - 1];
			}
			mmin[i] = minn;
			mmax[i] = maxn;
		}
	}
	for (int i = 1; i <= n - k + 1; i++) {
		printf("%d ", mmin[i]);
	}
	printf("\n");
	for (int i = 1; i <= n - k + 1; i++) {
		printf("%d ", mmax[i]);
	}
	return 0;
}

评论:

请先登录,才能进行评论