数据结构
傻蛋的阿简
我,会骗人的江湖骗子
展开
-
BZOJ 3211 线段树 区间更新 区间求和
传送门:题目题意:给一个序列,有两种操作:给区间[l,r],区间的每个值都开根号查询区间[l,r]的sum和题解:纯的线段树,区间更新,区间求和,套个模板就好。然后有个技巧,10910910^9开5次方就是1了,所以我们在建树的时候,发现值≤≤\leq1的时候,标记一下,然后以后更新的时候,遇到1直接跳过就好了。坑点:不能用cin,cout,要不会超时。A...原创 2018-08-26 21:25:42 · 396 阅读 · 0 评论 -
HDU 5923 并查集
传送门:题目题意:题目比较难理解,读懂之后就是个并查集,别的博客用的可持久化并查集,本人就用了个普通并查集,也能AC,因为不会可持久化并查集啊。 有一个图,一棵树,然后树中的每个结点存的都是图中的边的信息,所以图有m条边,则树就有m个顶点。然后有q次问询,每次问询都给几个点,从树中找到这些点,并且他们的所有祖先也要加入这个集合,然后把这个集合映射到图中,求图的连通分量。答案就是连通分...原创 2018-08-22 20:32:52 · 177 阅读 · 0 评论 -
Codeforces 799C 暴力 线段树 RMQ
传送门:题目题意:一个人,想要购买两件商品,有两种货币,每件商品能且之能用一种货币购买,每件商品都有一个权重,我们想让购买的商品权重和最大,要求输出最大的权重和,如果没办法购买两件商品,输出0题解:第一开始看到数据范围10510510^5,想到这道题得用线段树了。然后突然想到先按权重从大到小排,然后找到能够购买的权重最大的商品,找到后直接退出就行了(贪心),这样复杂度到不了n2n2...原创 2018-08-21 13:42:24 · 280 阅读 · 2 评论 -
HDU 4521 LIS变形 简单dp 线段树 单点更新 区间最值
传送门:题目题意:给一个由n个数组成的序列,然后从左到右取一些数组成一个新序列,这个新序列满足一些条件:新序列是递增的原序列取得过程中,相邻两个元素的位置间隔至少为d原序列的个数尽可能多题解:第一个条件明显是LIS,第二个题目告诉我们这道题是LIS的变形,说是变形,其实就改了一点,我们在求普通LIS的时候,dp[i]=dp[i-1]+1,这道题:dp[i]=dp[i-d...原创 2018-08-25 12:57:41 · 153 阅读 · 0 评论 -
HDU 5316 线段树 单点更新 区间最值
传送门:题目题意:给一个序列,有n位,下标索引为[1,n],有两种操作:更改某一位的值查询区间[l,r]中子序列中所有元素累加和的最大值,这里子序列的定义为:子序列中的下标映射到原序列中,下标可以不相邻,只要满足奇偶交替即可,比如:原序列是”1,2,3,4,5,6,7,8,9”,那么子序列可以为"1,4,5,6,7,8,9"或者"4,1,5,6,7,8,9&a原创 2018-08-25 15:56:03 · 181 阅读 · 0 评论 -
POJ 2481 树状数组
传送门:题目AC代码:#include <iostream>#include <cstring>#include <cstdio>#include <algorithm>#define debug(x) cout<<#x<<&a原创 2018-08-25 17:51:55 · 186 阅读 · 0 评论 -
Codeforces 600E dsu on tree 启发式合并
题目:传送门题意:给一颗树,计算所有结点的子树,颜色最多的结点的 颜色种类的sum和,子树的定义是当前结点和其所有的子节点。题解:我们可以想到一种暴力的解法,就是O(n)遍历所有的结点,然后dfs搜索它的所有子节点,查看颜色出现最多的结点,用一个ans数组维护答案,最后输出ans。显然,这样做的复杂度为O(n^2^)我们这里用到dsu on tree算法,关于这个算法的详解,可以参考:...原创 2018-10-09 21:44:51 · 515 阅读 · 0 评论 -
dsu on tree 启发式合并算法
翻译自:http://codeforces.com/blog/entry/44351我们先引入这样一个问题:有一棵树,树上有很多结点,每个结点有一个颜色c,我们现在想知道树上每个结点的子树**(subtree)**,有多少个结点出现颜色c。子树的定义:该结点和其所有的孩子构成的树。如上图:结点1子树:3个结点出现黄色,2个结点出现红色结点2子树:2个结点出现黄色,1个结点出现红色结...原创 2018-10-10 11:57:04 · 890 阅读 · 1 评论 -
POJ 3321 DFS序 + 树状数组 查询子树
题目:传送门题意:给一个树,查询结点下的子树的苹果总数,并且要求支持增减苹果题解:查询子树,我们首先想到的是DFS序,还要支持修改操作,我们可以用树状数组维护这个DFS序,因为还要查询,所以我在实际程序中使用了欧拉序。AC代码:#include <iostream>#include <vector>#include <cstdio>#defin...原创 2018-10-10 17:51:34 · 823 阅读 · 0 评论