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;
}