单调队列 && 单调栈
Cold_Chair
我XXX就是饿死,死外边,从这里跳下去,也不会再做你九条可怜一个测试点
展开
-
JZOJ_1222《Kup》——一道劲题
经典劲题原创 2017-01-12 21:27:39 · 630 阅读 · 0 评论 -
【NOI2018模拟4.3】paint
Description: 1<=n<=100000题解:有一个非常易证但是不显然的结论。答案矩形一定过横轴中线或数轴中线。只考虑数轴中线先,横轴中线翻转一下再做就行了。中线把点分成了两个部分。按x排个序,x相同的只取最接近中线的一个。然后扫,建单调栈,正常的暴力的话每次查询是单调栈的长度的复杂度。但是可以离散+线段树。线段树存的是以这个坐标为左边界,往上下的最长长度,便于统计,还要减去一个横坐标。原创 2018-04-15 20:00:11 · 317 阅读 · 0 评论 -
【2011集训队出题】拆迁队
Description:lanxisi带领着他的拆迁队来整治一个街道。这个街道由N个旧房子组成,从左到右编号为1..N。每个旧房子i有一个正整数的美观度Ai。 lanxisi希望整个街道从左到右美观度严格递增,也就是保证AiAj(ij)Ai。但是旧的街道明显不符合这个要求,于是lanxisi希望拆迁一些旧房子并在原地建立新房子来满足这一要求。但是与很多拆迁队一样,很多钉子户拒绝拆迁。所以原创 2018-01-05 18:28:11 · 474 阅读 · 0 评论 -
【WC2015模拟2.5】数组
题目大意:给你n个元素的颜色。 问元素的颜色互不相同的区间有多少个。 支持单点修改。 1<=n<=10^5题解:设last[i]表示i元素的颜色上一次出现的位置。 假设我们确定了区间左端点x, 右端点y要满足条件则max(last[i])<x,(i in [x..y])max(last[i])<x,(i~ in ~[x..y])再设一个p数组,p[last[i]]=i则右端点<min(p[原创 2018-01-12 18:35:49 · 296 阅读 · 0 评论 -
【WinterCamp 2013】楼房重建 && 【NOIP2017提高A组模拟10.8】God Knows
感谢czy的题解。这两题是类似的。转换以后都是这样的: 有一个序列a[1..n],每次询问对a[i-j]之间的元素做一个(递增或递减)单调栈,求单调栈里有多少个元素,或者是还有b[1..n],求做了单调栈以后,单调栈里的元素对应的b的极值。 有修改,为单点修改。做法其实本质是利用线段树的分治思想。假设建的是递减的单调栈,求单调栈里元素的个数。设query(l,r,p)表示在a[l..r]所形成的原创 2017-10-25 19:32:28 · 595 阅读 · 0 评论 -
【NOIP2017提高A组模拟10.8】Lost My Music
Description: 1<=n<=5∗1055*10^5题解:由于本人太弱,不会什么斜率优化,所以只能这样做了: 设答案为Ans。cv−cudis(u,v)<=ans{c_v-c_u\over dis(u,v)}<=anscv−cudepu−depv<=ans{c_v-c_u\over dep_u-dep_v}<=anscv−cu<=ans∗(depu−depv)c_v-c_u<=ans*(原创 2017-10-25 20:26:57 · 543 阅读 · 0 评论 -
【NOIP2017提高A组冲刺11.4】Genocide
Description:题解:先思考50分的做法。 显然是拆式子,把和i有关的划到一边,和j有关的划到一边,中间有个-ij,维护一个交点递减的单调栈,直接做就好了(斜率优化什么的我不会)。100分的做法比较坑爹。 对于x,首先预处理不选它的最大值,用50分的做法前后做两遍就行了。还要求出一定选它的最大值,这就比较玄乎了。关于区间的,可以yy出分治。对于区间[x..y],设 m = x +y/ 2原创 2017-11-06 19:33:38 · 311 阅读 · 0 评论 -
笛卡儿树学习小记
定义:笛卡儿树是一种比较偏门的二叉树数据结构,树上的每个点有一个key、value,key是序号,value是值。对于一个点x,满足它的左子树的key都小于它,右子树的key都大于它,也就是说,笛卡儿树是和splay一样的二叉搜索树。并且它还具有堆的性质,对于一个点x,满足它的子孙节点的key都大于(或小于)它。用法:一般是把一个序列建成笛卡儿树,利用笛卡儿树的性质乱搞。 下一篇博客会讲一道例题。原创 2017-08-08 16:15:04 · 493 阅读 · 0 评论 -
lhxsb(cdq分治+单调栈)
题目大意:有删点,动态的询问一个点向左向右能看到的最远的点。题解:假设没有删点,这个显然可以直接单调栈前后扫两遍搞定。如果有了删点,考虑cdq分治。cdq分治搞不了删点,倒着变成加点。第一维是时间,第二维是x对于分治到区间(l,r),设m=l+r>>1cdq分治让我们只用去处理[l..m]的插入对[m+1..r]的询问的影响。强行建出单调栈,求能看到...原创 2018-05-24 21:35:11 · 411 阅读 · 0 评论