单调队列
青禾script
这个人太弱,所以也不知道能写什么23333
展开
-
[HDU 3415] Max Sum of Max-K-sub-sequence · 单调队列
大概就是求一个环形序列里长度不超过k的最大子段和。 因为是环形,所以我们可以把序列复制一遍。 对于每个i,我们要求的就是一个j,使得i-j+1 那怎么求呢?把前缀和处理出来,i~j的序列和就是s[i]-s[j-1],i是每次枚举的,已经确定,所以我们就是需要求最小的s[j-1]。 我们可以用递增的单调队列来维护前缀和,队列中存的是下标。 另外就是一些细节处理。#include #inc原创 2015-06-16 20:48:04 · 1166 阅读 · 0 评论 -
[POJ 2823] Sliding Window · 单调队列
单调队列。 会做BZOJ1047怎么可能连这种基础题都做不起来= =完全就是个裸的单调队列,不过队列里存的还是数组中对应值的下标,而不是值,方便做类似删除的操作。 附:单调队列基本不可能要写二分的,但是这题太逗比了。。。而且就算写了二分再加上读入输出优化也只有C的才能过,GCC过不了。。。难道是表示对不会C的C++党的鄙视吗?! 就当是练一下二分,顺便第一次写了输出优化(没想到还真有这种东西原创 2015-04-08 09:13:49 · 367 阅读 · 0 评论 -
[BZOJ 1047] HAOI 2007 理想的正方形 · 单调队列
注:笔者之前写的一篇是TLE,重写本篇。 两次二维单调队列。 第一次单调队列,处理出Max/Min[i][j]表示a[i-k+1...i][j]这段中的最大/最小值; 第二次单调队列,处理出Max'/Min'[i][j]表示Max/Min[i][j-k+1...j]这段中的最大最小值,实际上就是a[i-k+1..i][j-k+1...j]子矩阵的最大/最小值了,最后扫描一遍得出结果。 我们原创 2015-04-06 23:13:15 · 480 阅读 · 0 评论 -
[BZOJ 1293] SCOI 2009 生日礼物 · 单调队列
单调队列。 初始按照位置顺序将n个珠子排序,然后维护一个单调队列:每次删除第Left号珠子,如果发现当前串中该颜色的珠子数为0,就将Right往后更新直到找到一个颜色与Left号珠子相同,查找过程中如果Right>N则直接退出。需要注意的是,一个位置上可能有多个珠子,每次删除要将这个位置上的珠子全部删去。 #include #include #include using namesp原创 2015-03-05 21:37:07 · 515 阅读 · 0 评论