单调栈
文章平均质量分 72
neither_nor
这个作者很懒,什么都没留下…
展开
-
BZOJ4523 [Cqoi2016]路由表
这真TM是语文题啊,简直就是作为意志与表象的世界,你几分钟能看懂题?简述一下题意吧,两种操作,支持在字符串序列末尾加入一个串,支持给你一个串s,最优匹配串定义为能作为s前缀的且最长的加入的串,按顺序把每个加入的串xi与s匹配,如果xi是s的前缀并且xi的长度比当前最优匹配串长,就把最优匹配串设成xi,问在第l个到第r个串之间最优字符串改变了多少次……我语文也不咋地看一眼还以为需要可持久原创 2016-04-29 14:28:37 · 743 阅读 · 0 评论 -
BZOJ1510 [POI2006]Kra-The Disks
傻逼题先单调栈处理一下对于第i层,长度至多为多少才能到达然后每次二分一下落到哪即可#include#include#include#include#include#include#include#include#include#include#include#include#include#includeusing namespace std;#defin原创 2017-02-21 10:22:38 · 789 阅读 · 0 评论 -
BZOJ1168 [Baltic2008]Gloves
发现我根本做不动ahcisy做的题啊……orz了一发ahcisy题解首先把有一个抽屉里没有这种种类的都刨出去然后直接计算那么考虑每种都是两个抽屉里都有的情况最劣情况肯定是把所有种类分成两个集合,第一个集合里共有p个,第二个集合里共有q个,第一个抽屉里拿的就是这p个,第二个里拿的就是那q个那么所有x那么枚举2^n种分法,搞一发单调栈就行了#include#include原创 2017-02-28 11:09:00 · 559 阅读 · 0 评论 -
BZOJ4750 密码安全
妈的,新年第一天做BZ上新加的题,我也真TM是颓了对原数列做前缀异或和,设为s,g(L,R)就等于s[R]异或s[L-1]先考虑对每个数求出他作为最大值的区间,单调栈找到左边第一个大于他的位置+1设为l[i],右边第一个大于等于他的位置-1设为r[i]答案就等于然后这题位运算,位运算有独立性,考虑每位分别计算答案,然后第i位的答案乘上2的i次方,加一起即可对于单独的一位,前缀异原创 2017-01-01 22:41:13 · 1203 阅读 · 3 评论 -
BZOJ4709 [Jsoi2011]柠檬
考虑DP,f[i]表示前i个的最大价值我们发现对于任意一个i,他所选的最后一段所指定的颜色一定是i的颜色,因为否则的话i这个点就会没有贡献,一定不如最后一段只选一个i那么在最后一段所选的颜色一定是i的情况下,最后一段的开头的颜色也一定是i的颜色,否则开头一段也没有贡献,不然单分出去一段那么对于f[i],假设之前存在一个点j,这个点的颜色a[j]与i的颜色a[i]相等,那么我们可以让f[原创 2016-11-22 14:06:30 · 2520 阅读 · 9 评论 -
BZOJ3521 [Poi2014]Salad Bar
把p看作1,j看作-1,作前缀和数组s,那么一个区间[l,r]合法的条件就是对于任意的l=s[l-1],s[i-1]那么对于每个点单调栈求出前边第一个比他大的在哪low,后边第一个比他小的在哪far,然后枚举i作为右端点,然后线段树查从low到i中far比i大的最靠前的那个即可#include#include#include#include#include#include#in原创 2016-09-27 13:20:04 · 577 阅读 · 0 评论 -
BZOJ2086 [Poi2010]Blocks
容易发现,一段区间满足题目要求的充要条件是区间和>=区间长度*k做前缀和数组s,这样就得到了以每个点为右端点,1为左端点的区间的和,然后另s[i]等于s[i]-i*k,这样得到差数组d,如果d[i]>=0,那么说明当前以i为右端点是满足题目要求的每次把左端点右移一位相当于删掉d数组最左边的元素,并且把每个数加上k-a[i]这样我们只要得出d数组每个位置第一次变得大于等于0是什么,就可以原创 2016-09-13 21:04:05 · 889 阅读 · 0 评论 -
BZOJ4548 小奇的糖果
同3658 Jabberwocky双倍经验把内存开小点#include#include#include#include#include#include#include#include#include#include#include#include#include#includeusing namespace std;#define MAXN 100010原创 2016-08-22 10:44:33 · 658 阅读 · 0 评论 -
BZOJ3956 Count
orz ljss……我们发现,以i为两个端点中较小的那个的好的点对最多有两个(以i为左端点一个,右端点一个)单调栈预处理所有好的点对然后二维数点即可#include#include#include#include#include#include#include#include#include#include#include#include#include#in原创 2016-09-09 09:54:07 · 720 阅读 · 0 评论 -
BZOJ3658 Jabberwocky
考虑对于向上包含和向下包含分开计算不包含所有颜色即有一种颜色一定不包含,考虑枚举这个不被包含的颜色,计算向下包含的最大答案将所有同颜色的店以x为第一关键字y为第二关键字排序,然后枚举右端点,如果一个点在另一个点的右下方,那么左上方的点就没有用了,因为如果以他右边的点为右边界,他上边的点为上边界的话,左边界不可能在他左边。所以我们维护一个单调栈,加入一个点x的时候把所有y大于等于这个点的原创 2016-06-30 16:33:06 · 536 阅读 · 0 评论 -
BZOJ4826 [Hnoi2017]影魔
对每个点i,单调栈求出左边和右边第一个大于i的位置,记为l[i]和r[i]那么(l[i],r[i])会产生p1的贡献左端点为l[i],右端点在[i+1,r-1]的点对都会产生p1的贡献右端点为r[i],左端点在[l+1,i-1]的点对都会产生p2的贡献将点对看成平面上的点,横坐标左端点纵坐标右端点,上述贡献分别对应单点加和线段加查询就是矩形求和用主席树维护即可#incl原创 2017-04-17 15:08:47 · 2190 阅读 · 3 评论