
线段树
ws_yzy
一如OI情似海
展开
-
4415: [Shoi2013]发牌|线段树|并查集
很容易发现,如果有n张牌经过销牌n次的操作后与原牌的顺序是相同的 然后销牌的操作就相当于从当前的牌开始一直向后扫,扫到n后再回到1,直到找到第RiR_{i}张牌 这样可以用线段树维护一下,看当前销完牌后所取得牌在now...nnow...n还是1...(now−1)1...(now-1)直接用线段树找出这张牌。用并查集维护去玩这张牌后的下一张牌 复杂度O(nlog2n)O(nlog_{2}n)原创 2016-03-05 09:40:42 · 700 阅读 · 0 评论 -
BZOJ 1798: [Ahoi2009]Seq 维护序列seq|线段树
这道题和2631对标记的处理方法是一样的..以下直接复制 将乘法和加法合并起来算做一个标记,mulmul数组和plusplus数组两个数组算做一个标记,设权值为xx那么标记的意思就是把所有子节点的的xx都变为:mul∗x+plusmul*x+plus这样只要多维护一个sizesize数组就可以维护,下传标记也很好写 附上链接http://blog.youkuaiyun.com/ws_yzy/artic原创 2016-02-25 11:08:47 · 677 阅读 · 0 评论 -
1941: [Sdoi2010]Hide and Seek|动态加点线段树
传统的K-Dtree姿势http://blog.youkuaiyun.com/ws_yzy/article/details/50855522 对计算曼哈顿距离分四种情况讨论,枚举每一个点,维护它的左下,左上,右下,右上的点,在相同区域的点的计算曼哈顿的符号是相同的 先用左下方的点更新每一个点,线段树是按纵坐标建立,对于点(x,y)(x,y),此时线段树中存的是−x−y-x-y,维护最大值和最小值 从左到右原创 2016-03-11 15:42:19 · 1014 阅读 · 4 评论 -
3747: [POI2015]Kinoman|线段树
枚举左区间线段树维护最大值#include<algorithm>#include<iostream>#include<cstdlib>#include<cstring>#include<cstdio>#include<vector>#include<cmath>#include<queue>#include<set>#include<map>#define ll long lon原创 2016-03-23 15:32:22 · 1138 阅读 · 0 评论 -
2124: 等差子序列|线段树维护哈希值
集训队的题是厉害啊 从左到右枚举每一个数作为等差序列的中间项,判断是否存在等差子序列 考虑枚举到一个位置ii,假设a[i]−xa[i]-x在前面出现过,那么如果不存在等差子序列,a[i]+xa[i]+x肯定也在前面出现,同理a[i]−xa[i]-x若在前面没出现过,那么a[i]+xa[i]+x也不能在前面出现,否则就存在了等差子序列。 从前向后枚举,如果出现了某个数,就为11否则就为00,这样原创 2016-04-06 11:34:55 · 2108 阅读 · 1 评论 -
4516: [Sdoi2016]生成魔咒|后缀数组|线段树|ST表
将原串倒过来,每次添加一个字符相当于增加一个后缀。 问题转化为向集合中动态添加后缀求本质不同的字串的个数,离线求出SASA 找出当前添加的串与集合中的串的最大的LCPLCP,就是重复出现的子串的个数,线段树维护集合中rank的前驱和后继, 考场上的原代码(SDOI唯一A掉的一道题QAQ)#include<algorithm>#include<iostream>#include<cstdli原创 2016-04-15 08:22:43 · 1458 阅读 · 1 评论 -
3073: [Pa2011]Journeys|线段树|BFS
一种比较暴力的方法就是直接线段树优化建图,跑dijkstradijkstra 但是这题的边权都是11可以考虑BFS的方法 首先按照yy将所有的边排序,然后按照xx的大小插入到线段树中 这样每次询问一个点pp下一步能走到哪些点可以直接在线段树中找到x<=px<=p并且y>=py>=p的点 因为已经按照yy排序,所以最终线段树中的连边的yy是递减的,这样就可以做到线性的BFSBFS#includ原创 2016-04-18 15:30:41 · 1029 阅读 · 0 评论