可爱萌新求条,马蜂良好
查看原帖
可爱萌新求条,马蜂良好
754495
KAqvq楼主2025/7/21 15:37

ac on #10,其他全 wa。

#include <bits/stdc++.h>
#define N 100005

typedef long long LL;

const LL K = log2(N * 3) + 1;

LL n, b[N << 2], f[N << 2][K], lg[N << 2]; 

inline LL query(LL l, LL r) {
	LL q = lg[r - l + 1];
	return std::max(f[l][q], f[r - (1 << q) + 1][q]);
}

inline void init() {
	lg[1] = 0; lg[2] = 1;
	for (LL i = 3; i < 3 * N; ++i) lg[i] = lg[i >> 1] + 1;
}

int main() {
	std::cin >> n;
	for (LL i = 1; i <= n; ++i) {
		std::cin >> f[i][0];
		f[i + n][0] = f[i + n + n][0] = f[i][0];
	}
	LL l = lg[3 * n];
	for (LL s = 1; s <= l; ++s) {
		for (LL i = 1; i + (1 << s) <= 3 * n + 1; ++i) {
			f[i][s] = std::max(f[i][s - 1], f[i + (1 << (s - 1))][s - 1]);
		}
	}
	for (LL i = 1; i <= n; ++i) {
		std::cin >> b[i];
		LL l = 1, r = n;
		while (l < r) {
			LL mid = (l + r) >> 1;
			if (std::max(query(i + n - mid, i + n - 1), query(i + n + 1, i + n + mid)) >= b[i]) r = mid;
			else l = mid + 1;
		}
		if (l == n) std::cout << -1 << ' ';
		else std::cout << l << ' ';
	}
	return 0;
}
2025/7/21 15:37
加载中...