随笔分类 - ----线段树
摘要:题目看这里一道比较简单的贪心题容易想到从前到后确定每一位我们可以用一个splay来维护当前未确定的部分的顺序假设当前剩下k次操作机会那么我们可以求出splay中前k+1个元素中的最大元素i,令k减少rank(i),让后将其输出并从splay中删掉最后k=0时,输出sp...
阅读全文
摘要:终于又遇到SAM的题了好好玩,而且就这道题让我弄清楚了广义SAM和Trie上SAM的区别其实两者是没有多少区别的,不过Trie上SAM可以更快关于Trie上SAM,是用bfs的方法来构建的,相比起广义SAM用dfs建少了一个深度之和的部分但是如果原题给的就是Trie那...
阅读全文
摘要:平衡树的问题,很容易想到中序遍历那么我们给每一个节点记录一下中序遍历中它子树所在的区间,一次旋转显然只会改变两个节点的值对于询问我们用线段树区间求积就可以了#pragma GCC optimize("O3")#pragma G++ optimize("O3")#inc...
阅读全文
摘要:前文再续,书接上回,话说神牛yxr成功培育出神牛细胞,可最终培育出来的生物体却让他大失所望……后来,他从某GD女神 牛处知道,原来他培育的细胞发生了基因突变,原先决定神牛特征的基因序列都被破坏了,神牛yxr很生气,但他知道基因突变有低频性,说不定还有一些优秀基因没有突...
阅读全文
摘要:给定一个长度为 n 的正整数序列 a 1 ...a n . 现在有 m 次操作, 分为两种:• 1 l r t: 将区间 [l,r] 降序排序 (t = 0) 或升序排序 (t = 1)• 2 l r: 询问区间 [l,r] 内元素之积的十进制下最高位雅礼集训的题目,...
阅读全文
摘要:题目看这里我们发现需要动态维护一个字符串是否成周期根据border的一个简单性质,得出周期串的充分必要条件是,如果a[i..k]=a[j-k+1..j] 那么a[i..j]是以k为周期的串于是可以用线段树来维护哈希莫名其妙rank1..#include#include...
阅读全文
摘要:题目看这里一个简单的计数问题我们先考虑O(n^2)的做法对每个点dfs一次,求出d[i]表示i的深度,那么对答案贡献就是Σ2^(n-d[i])那么我们考虑用数据结构动态维护这个d[i],显然可以用线段树来维护dfs序做到复杂度O(n lg n) 效率很高rank8看了...
阅读全文
摘要:题目看这里我们考虑怎样得到最大答案首先对原序列进行括号配对,没有配对上的那些可以直接扔掉不影响答案让后我们有一个合法的括号序列当一对括号与区间有相交但是不包含整个区间时,将会产生一个位置的浪费(在区间内的那个左括号或者右括号没法配对了),所以答案-1那么一个区间的答案...
阅读全文
摘要:题目看这里也是非常简单的线段树合并模板题了,虽然实际上最好的做法因该是开数组合并(这样是均摊O(1)的)不过还算跑的快,第四#pragma GCC opitmize("O3")#pragma G++ opitmize("O3")#include#include#inc...
阅读全文
摘要:现在,二维平面上有N个点。Alex 需要实现以下三种操作:1. 在点集里添加一个点;2. 给出一个点,查询它到点集里所有点的曼哈顿距离的最小值;3. 给出一个点,查询它到点集里所有点的曼哈顿距离的最大值。 两个点的曼哈顿距离定义为它们的横坐标差的绝对值与纵坐标差的绝对...
阅读全文
摘要:一开始看错题目了,很容易看成i喜欢的中,让后写主席树区间第k大反过来其实也很好做,我们考虑将所有的L,R,P丢到一起考虑,分两种操作,询问和修改(是不是很像cdq分治)排个序再加上个平衡树离散化+ZKW线段树求第k大就好了(注意题目坑点:是第k大不是第k小)#prag...
阅读全文
摘要:非常好的树剖模板题了,直接C颗线段树上去就好了,动态开点一次写对~#pragma GCC opitmize("O3")#pragma G++ opitmize("O3")#include#include#include#define N 100010#define m...
阅读全文
摘要:Jzoj1020:Dramatic是在太菜了。最近,他学习了有关逆序对的知识,并且掌握了计算一个序列逆序对个数的高效算法,因此,他兴冲冲的跑去向YY牛炫耀。YY牛对此不屑一顾,并打击Dramatic说:“这是在太小儿科了!”Dramatic很不甘心,于是在他的强烈要...
阅读全文
摘要:给一个树,每条边上面有一个字符串,每次询问两个节点路径上的字符串中有多少以给定的一个字符串为前缀显然是一个十分简单的题目,当时想多了打了树剖+Trie合并后来才意识到可以用差分+可持久化trie,过于愚蠢了。。。。。其实solution给了另一种解法,将所有字符串排序...
阅读全文
摘要:维护一个序列,使它可以进行下面两种操作:1.在末尾添加一个数字x2.将整个序列变成第x次操作后的样子在每次操作后,输出当前序列的最长上升子序列的长度序列初始时为空嗯,可持久化线段树的裸题额这可是noip提高组难度的题,我们发现所有操作可以变成一棵树(离线做法老套路了)...
阅读全文
摘要:相信大家都在长训班学过树塔问题,题目很简单求最大化一个三角形数塔从上往下走的路径和。走的规则是:(i,j)号点只能走向(i+1,j)或者(i+1,j+1)。如下图是一个数塔,映射到该数塔上行走的规则为:从左上角的点开始,向下走或向右下走直到最底层结束。 1 3 8 ...
阅读全文
摘要:对于一个整数序列A,我们定义f(A)=max{floor(|Ai-Aj|/(j-i))},这里i|ai−ai+1|把这n个不等式加起来,得an+1−a1>|a1−a2|+⋯+|an−an+1|整理,得a2+|a2−a3|+⋯+|an−1−an|−an|an−an−1|+⋯+|a3−a2|一个数取绝对...
阅读全文
摘要:相信大家都在长训班学过树塔问题,题目很简单求最大化一个三角形数塔从上往下走的路径和。走的规则是:(i,j)号点只能走向(i+1,j)或者(i+1,j+1)。如下图是一个数塔,映射到该数塔上行走的规则为:从左上角的点开始,向下走或向右下走直到最底层结束。 1...
阅读全文
摘要:对于一个整数序列A,我们定义f(A)=max{floor(|Ai-Aj|/(j-i))},这里i|ai−ai+1|把这n个不等式加起来,得an+1−a1>|a1−a2|+⋯+|an−an+1|整理,得a2+|a2−a3|+⋯+|an−1−an|−an|an−an−1|...
阅读全文
摘要:有一个外星人控制了你的大脑。一开始你处于原点(0,0)。外星人有一个由(R,U,D,L)组成的长度为M 的操作序列,分别代表(右,上,下,左)。平面上有N 个关键点,每当外星人给出一个操作,你需要在这个方向上找到最近的一个关键点,并走到那个点上。保证输入数据合法。100%的数据,N,M≤100000...
阅读全文