滑动窗口
作者:
成理第一深情
,
2024-01-17 20:35:25
,
所有人可见
,
阅读 112
Acwing 154.滑动窗口
- 假设滑动的过程中新来一个数,此时这个数比队尾的数要小就弹出队尾的数,这是个while的过程,直到队尾的数比这个数要小。这样就永远保证滑动串口中最小的数在队头
N = 1000010
a = [0] * N
q = [0] * N
hh, tt = 0, -1
if __name__ == "__main__":
n, k = map(int, input().split(' '))
a = list(map(int, input().rstrip().split(' ')))
for i in range(n):
if hh <= tt and i - k + 1 > q[hh]:
hh += 1
while a[i] <= a[q[tt]] and hh <= tt:
tt -= 1
tt += 1
q[tt] = i
if i -k + 1 >= 0:
print(a[q[hh]], end=' ')
print()
hh, tt = 0, -1
for i in range(n):
if hh <= tt and i - k + 1 > q[hh]:
hh += 1
while a[i] >= a[q[tt]] and hh <= tt:
tt -= 1
tt += 1
q[tt] = i
if i -k + 1 >= 0:
print(a[q[hh]], end=' ')
每次输入的时候都rstrip一下吧,太坑了