平衡树做法90分求助
查看原帖
平衡树做法90分求助
742845
Albatross_LC楼主2023/9/3 17:21

平衡树做法T#9

#include "cstdio"
#include "vector"
#include "algorithm"
#include "string"
using namespace std;
int n, k, a[1000010];
int mx[1000010];
vector<int> e;
int read() {
    int ret = 0, sgn = 0, ch = getchar();
    while (!isdigit(ch)) sgn |= ch == '-', ch = getchar();
    while (isdigit(ch)) ret = ret * 10 + ch - '0', ch = getchar();
    return sgn ? -ret : ret;
}
main() {
	n = read(), k = read();
	for (int i = 1; i <= n; i ++ ) {
		a[i] = read();
        e.insert(upper_bound(e.begin(), e.end(), a[i]), a[i]);
		if (i >= k) {
            if (i > k) e.erase(lower_bound(e.begin(), e.end(), a[i - k]));
			mx[i] = e[k - 1];
			printf("%d ", e[0]);
		}
	}
	printf("\n");
	for (int i = k; i <= n; i ++ )
		printf("%d ", mx[i]);
}

想用平衡树试试,但T了,有没有大佬知道怎么回事,复杂度O(nlog⁡n)O(n\log n)

2023/9/3 17:21
加载中...