为啥是普及组???
因为我菜啊,普及组的东西都不知道。。。
1. O(n)求数列最大连续子段和
用递推,last表示取到上一个位置最大的连续子段和
for(int i=1;i<=n;i++){
last=max(last,0)+a[i];
ans=max(ans,last);
}
对于环形数组呢?
首先讨论,环形和线型的关系,就是a[1]与a[n]相连
所以ans有两种情况:过a1,an之间的隔板,或者不过
对于不过,直接线性求,对于过,那最小连续子段和就不过
所以线性求maxn,minn
ans=max(maxn,sum-minn)
2. 当图比较稠密(有重边? 的时候,最短路的队列改成优先队列(堆优化???) 虽然多了一个log 但是会快很多
(luoguP1951)
to be continue;
3. 费用流
费用流的模板已经放在博客里了,为什么还是要放模板呢? 在网上找费用流模板的时候,发现,诶怎么都是单路增广。唯一一个名字叫zkw费用流的是多路增广。hzwer的博客里zkw的spfa是从T跑到S的,看得很别扭,导致我一直以为就是必须反着写。其实不然,正反是一样的,仔细看看,这不就是网络流的bfs改成spfa嘛,没啥区别啊。
4. LIS
nlogn时间求出最长lis 用单调队列的思想
dp[i]表示长度为i的lis末尾最小的数是多少 len表示最长长度(网上其它博客也有我就不说了)