寒假摸鱼大赏
前言:大一上跑去摸deep learning的鱼去了,原本的算法学习耽搁了很久。前不久,本半吊子选手终于决定gap半年,从零开始,享受并拥抱做普通人的快乐。
文章目录
单调栈和单调队列
-
单调栈常用题型:给定一个序列,找到序列当中每一个数,它的左(右)边比它小(大)且离其最近的数。
e.给定一个长度为 N 的整数数列,输出每个数左边第一个比它小的数,如果不存在则输出 −1。
#include<bits/stdc++.h>
using namespace std;
const int N=100010;
int stk[N],tt;
int main()
{ int n;
scanf("%d",&n);
for(int i=0;i<n;i++){
int x;
scanf("%d",&x);
while(tt && stk[tt]>=x) tt--;
if(tt) printf("%d ",stk[tt]);
else printf("-1 ");
stk[++tt]=x;
}
return 0;
}
- 单调数列常用题型:滑动窗口
e.有一个长为 n n n的序列 a a a,以及一个大小为 k k k 的窗口。现在这个从左边开始向右滑动,每次滑动一个单位,求出每次滑动后窗口中的最大值和最小值。
最小值获取