Acm学习总结15

Acm学习总结15
这次总结的是单调序列,其实这个所谓的单调序列并没有用到队列的知识,一个单调序列可以是递增的还有递减的,比如说一个递增的队列,1,3,2,1,5,6这么一组数。
1入队列然后3入队列,然后就是2入队列但是队尾的数字比新插入的元素还要大所以,为了保持不减的的数列所以需要把3踢出去所以最后得到的就是最前面的就是最小的数
其中有一道题就是:
滑动的窗口;其实用传统的方法就是一个双重循环就能解决这个问题,但是复杂程度就是n的平方;
重要的部分
int a[M],Q[M],I[M];
int i,n,k;
void getMin(){
int head=1,tail=0;
for(i=1;i<k;i++){
while(head<=tail&&Q[tail]>=a[i])tail–;
tail++;
Q[tail]=a[i];I[tail]=i;
}
for(i=k;i<=n;i++){
while(head<=tail&&Q[tail]>=a[i])tail–;
tail++;
Q[tail]=a[i];I[tail]=i;
while(I[head]<=i-k) head++;
printf("%d ",Q[head]);
}
}
还有求最大值就是跟这个相反就行了;
这次总结也就是这些了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值