給定長度 n 的循環序列,求以每個元素為起點的 n 個循環序列中,前綴和全非負的個數。
int head = 0, rear = -1;
int q[MAXN];
void pushq(int i) {
while (head <= rear && a[q[rear]] >= a[i]) rear--;
q[++rear] = i;
}
void popq(int i) {
while (q[head] < i - n + 1) head++;
}
int main() {
// 構建 2n 前綴和數組 a[]
for (int i = 1; i <= n; i++) {
pushq(i);
}
int tot = 0;
for (int i = 1; i <= n; i++) {
if (a[q[head]] - a[i-1] >= 0) tot++;
pushq(i + n);
popq(i + 1);
}
printf("%d\n", tot);
}