T1
单调栈
按照b排序
在家每一个物品时,判断一下a和b的关系
如果s[sta[top]].a>=s[i].b,就弹栈
记录所有时候的height,并取最大值
T2
单调栈裸题
单调栈是干什么的??
单调栈是记录一个数的一侧的第一个比他大或比他小的数
记录方法:若a将b弹出,则mark[b]=a;
T3
搜索+剪枝
剪枝1:若总长度%要拼成的长度!=0,就不用再搜了一定不合法
剪枝2:从大到小搜
剪枝3:若搜到第一个时,就直接用当前的最大值做为第一个
T4
emm……单调栈
从前扫一遍,从后扫一遍
在弹出时做异或的操作
时间复杂度:O(n)
T5
单调栈
话说这一次考了4道单调栈
和最大长方形的思路很像
求以a[i]为最小值的区段的左界le右界ri
然后更新答案num[ri-le(+1)(-1)]//自己看记录的ri和le是如何记录的
num[i]=max(num[i],num[i+1])
记住要从后向前取max