随笔分类 -  data structure

摘要:dp[i] = dp[j] + (a[i] - a[j])^2 + m;展开得 dp[i] = min{dp[j] + a[i]^2 + a[j]^2 - 2*a[i]*a[j] + m}其中a[i]^2 是与i相关的变量, 而m是常量,所以可以从表达式中抽离出来所以只要求 dp[i] = min{... 阅读全文
posted @ 2015-11-09 15:56 justPassBy 阅读(328) 评论(0) 推荐(0)
摘要:给n个数,有两种操作 Q a b 询问区间[a,b]的最大值, U a b 将第a个数的值改成bsplay树的中序遍历是我们所维护的序列。如果要询问区间[a,b]的最大值,那么只要将第a-1个数旋转到根结点, 将第b+1个数旋转到根的右孩子,那么根的右孩子的左子树就是所要查询的区间。我们为每一个... 阅读全文
posted @ 2015-10-20 19:17 justPassBy 阅读(388) 评论(1) 推荐(0)
摘要:HYSBZ1588http://www.lydsy.com/JudgeOnline/problem.php?id=1588给我们n天的营业额, 要求出每天的最小波动值,然后加起来。 当天最小波动值 = 当天营业额 - (之前某天与当天营业额最接近的营业额)所以维护一个spaly,将当天的营业额x插入... 阅读全文
posted @ 2015-10-20 12:27 justPassBy 阅读(235) 评论(0) 推荐(0)
摘要:给n个数,m个询问, 问任意区间内与其它数互质的数有多少个比如3个数1 2 4,询问[1,3] 那么答案是1千万要记住,这样的题目,如果你不转变下,使劲往线段树想(虽然转变之后,也说要用到线段树,但是维护的东西不同了),那么会发现这样的题目,区间与区间之间是无法传递信息的,区间与区间是无法传递信息的... 阅读全文
posted @ 2015-10-16 19:34 justPassBy 阅读(276) 评论(0) 推荐(0)
摘要:spaly没学过,用rope水过,rope是extension库中的东西,codeblocks编译器支持,需要包含#include using namespace __gnu_cxx;rope的各种操作时间都是log(n)但是不提供翻转的操作,那么如何实现翻转呢?只要维护一正一反两个rope,正ro... 阅读全文
posted @ 2015-10-11 19:01 justPassBy 阅读(281) 评论(0) 推荐(0)
摘要:给n个数,然后m个询问,询问任意区间的第k小的数,特别的,任意两个区间不存在包含关系,也就是说,将所有的询问按L排序之后, 对于i 2 #include 3 #include 4 #include 5 #include 6 using namespace std; 7 const... 阅读全文
posted @ 2015-10-11 18:13 justPassBy 阅读(445) 评论(0) 推荐(0)
摘要:hdu3308给n个数,有m个操作U a b 表示将第a个数改成bQ a b 表示询问区间[a,b]的最长连续递增子序列。区间询问问题且带修改,一般是用线段树来解决那么要维护Llen[rt], Lval[rt][2] 表示rt所对应的区间[l,r] 以l开头的最长连续递增子序列的长度, Lval[r... 阅读全文
posted @ 2015-10-02 18:11 justPassBy 阅读(727) 评论(0) 推荐(0)
摘要:给我们n个数,然后有m个询问,每个询问为L,R,询问区间[L,R]的最大最小值,最小公约数,最大公约数,和,异或,或,且这些问题通通可以用RMQ的思想来解决。以下用xor来作为例子设dp[i][j]为以i开头的,长度为2^j的区间的所有值得异或那么dp[i][j] = dp[i][j-1] xor ... 阅读全文
posted @ 2015-09-24 20:09 justPassBy 阅读(517) 评论(0) 推荐(1)
摘要:给定一颗树,树的每个结点都有权值,有q个询问,每个询问是 u v k ,表示u到v路径上第k小的权值是多少。每个结点所表示的线段树,是父亲结点的线段树添加该结点的权值之后形成的新的线段树c[root] 表示根为root的子树添加了多少个结点。那么c[lson[u]] + c[lson[v]] - c... 阅读全文
posted @ 2015-09-23 10:25 justPassBy 阅读(315) 评论(0) 推荐(0)
摘要:并查集专题训练地址,注册登录了才能看到题目并查集是一个树形的数据结构, 可以用来处理集合的问题, 也可以用来维护动态连通性,或者元素之间关系的传递(关系必须具有传递性才能有并查集来维护,因为并查集有压缩路径)。用并查集来维护元素之间关系的传递, 那么元素与元素之间就有一个权值(带权并查集),那么当路... 阅读全文
posted @ 2015-07-31 20:19 justPassBy 阅读(393) 评论(0) 推荐(0)
摘要:可持久化数据结构介绍可持久化数据结构是保存数据结构修改的每一个历史版本,新版本与旧版本相比,修改了某个区域,但是大多数的区域是没有改变的,所以可以将新版本相对于旧版本未修改的区域指向旧版本的该区域,这样就节省了大量的空间,使得可持久化数据结构的实现成为了可能。如下图,就是可持久化链表插入前插入后尽可... 阅读全文
posted @ 2015-07-15 10:35 justPassBy 阅读(255) 评论(0) 推荐(0)
摘要:线段树需要的空间。 区间为1-->n假设是一棵完全二叉树,且树高为i。完全二叉树性质:第i层最多有2^(i-1)个结点。那么 2^(i-1) = n; i = log2(n) + 1;共有 2^i - 1 个结点, 即 2^(log2(n) + 1) - 1个结点即2 * 2^log2(n... 阅读全文
posted @ 2015-03-18 18:34 justPassBy 阅读(205) 评论(0) 推荐(0)
摘要:dp[i][j] 表示以i结尾的长度为j的递增子序列dp[i][j] = sum(dp[k][j]) ka[j]如果只是单纯的循环for(j=2; j a[j]) dp[i][j] += dp[k][j-1];时间复杂度是O(n * n * m) TLE但是k循环可以用树状数组来优化,... 阅读全文
posted @ 2014-09-19 17:55 justPassBy 阅读(205) 评论(0) 推荐(0)
摘要:给定一个区间,如果要频繁修改该区间内的元素,且频繁查询该区间内任意小区间的元素之和时,可以用树状数组。普通的一次修改时间复杂度是O(1),而查询的时间复杂度是O(n). 树状数组的修改和查询的时间复杂度均为O(logn)给定区间1-->n,区间内对应的元素为a[i] (1 = 1) 5 {... 阅读全文
posted @ 2014-09-18 19:05 justPassBy 阅读(390) 评论(0) 推荐(0)