![](https://img-blog.csdnimg.cn/20201014180756780.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
线段树
文章平均质量分 83
Yoangh
奋斗的小程序猿
展开
-
线段树之单点更新求和hdoj1166
题目:hdoj1166 分析:题意很清晰,就是让你给某个点又增加或者减少x个,然后求某一段有多少个,我是用一个father数组保存叶子节点的编号,然后直接从当前节点开始,更轻到root就ok。 查询的话,从根节点开始,看在左子区间还是右子区间,直接查询到某一段全部在要查询的区间内,求和就ok,很简单。 代码: #include #include #include原创 2014-07-22 09:29:50 · 1043 阅读 · 0 评论 -
poj 3468 A Simple Problem with Integers 【线段树-成段更新】
题目:poj 3468 A Simple Problem with Integers 题意:给出n个数,两种操作 1:l -- r 上的所有值加一个值val 2:求l---r 区间上的和 分析:线段树成段更新,成段求和 树中的每个点设两个变量sum 和 num ,分别保存区间 l--r 的和 和l---r 每个值要加的值 对于更新操作:对于要更新到的区间上面的区间,直接原创 2014-10-31 20:53:38 · 1062 阅读 · 0 评论 -
poj 2828 Buy Tickets 【线段树点更新】
题目:poj 2828 Buy Tickets 题意:有n个人排队,每个人有一个价值和要插的位置,然后当要插的位置上有人时所有的人向后移动一位当这个插入到这儿,如果没有直接插进去。 分析:分析发现直接插入移动的话花时间太多,我们可不可以用逆向思维。从后往前来,因为最后一个位置是肯定能确定的,而其他的则插入空的第某个位置。 比如第一组样例: 4 0 77 1 51 1 3原创 2014-10-30 21:40:23 · 1015 阅读 · 0 评论 -
codeforces 482B. Interesting Array【线段树区间更新】
题目:codeforces 482B. Interesting Array 题意:给你一个值n和m中操作,每种操作就是三个数 l ,r,val。就是区间l---r上的与的值为val,最后问你原来的数组是多少?如果不存在输出no 分析:分析发现要满足所有的区间,而一个点上假如有多个区间的话,这个点的值就是所有区间或的值,因为只有这样才能满足所有区间的,把所有位上的1都保存下来了,原创 2014-10-29 19:34:10 · 2521 阅读 · 1 评论 -
hdoj 1394 Minimum Inversion Number【线段树求逆序对】
#include #include #include using namespace std; const int N = 101000; int a[N]; struct Node { int l,r,num; }; Node tree[4*N]; void build(int l,int r,int o) { tree[o].l=l,tree[o].r=r; t原创 2014-08-19 09:31:40 · 2709 阅读 · 0 评论 -
codeforces 459D - Pashmak and Parmida's problem【离散化+处理+逆序对】
题目:codeforces 459D - Pashmak and Parmida's problem 题意:给出n个数ai原创 2014-08-19 10:21:28 · 1917 阅读 · 0 评论 -
UVALive 5881 Unique Encryption Keys【线段树】
题目:UVALive 5881 Unique Encryption Keys 分类:线段树,想法题 题意:给出n个数,然后有q次查询,每次查询 l---r 区间内有没有重复的数,有的话输出任意的,没有的话输出ok 分析:上去一看觉得这个题目可以不用线段树做,因为它是静态的,想了一个方法后来发现时不对的,后来规规矩矩用线段树了。 这个题目不能直接用线段树,否则的话无法原创 2014-08-15 18:38:19 · 1158 阅读 · 0 评论 -
poj 2528 Mayor's posters【离散化+线段树】
题目:poj 2528 Mayor's posters 题意:给一个长度非常长的墙上贴长度为ai的海报,由于有的会覆盖掉,求最后能看见的海报个数。 分析:题目和POJ2777 一模一样,方法也一样,只不过这个要离散化,其次要数组开大一点。至少2倍。 离散化的时候用了C++的 pair 类,还是比较好用的。 代码: #include #include #incl原创 2014-08-08 18:36:51 · 1159 阅读 · 0 评论 -
poj 2777 Count Color【线段树段更新】
题目:poj 2777 Count Color 题意:给出一段1 * n 的栅栏,有两种操作,第一种:把 l -- r 全部染成同一颜色t,第二种,查询 l---r 一共有多少种颜色。 分类:线段树 分析:我们可以给每个节点加一个标记,标记当前节点是否只有一种颜色,然后对只有一种颜色的节点如果要染色的话,那么他会变成几种颜色的,这时候记得向下更新一次就好,统计的时候统原创 2014-08-08 16:26:56 · 980 阅读 · 0 评论 -
hdoj 4902 Nice boat【线段树成段更新】
题目:hdoj 4902 Nice boat 来源:2014 Multi-University Training Contest 4 题意:给出n个数,有两种操作,第一种是给l--r区间全部替换为x,第二种操作是给 l---r 区间上比x大的替换为gcd(x,num),求最后区间的值。 分析:很明显的线段是入门题目,当然定位也是签到题,刚学了线段树,没写过,比赛原创 2014-08-04 17:37:50 · 1055 阅读 · 0 评论 -
线段树单点更新区间最大值 hdoj1754I Hate It
题目:hdoj1754 I Hate It 分析:更新的话,建树的时候保存叶子编号的的节点信息,然后从下往上更新就ok。 求和的话,从根节点开始,然后找在根的左边还是右边,然后递归找一个所有中的最大值即可、 代码: #include #include #include using namespace std; const int N = 205000; struct原创 2014-07-22 09:32:16 · 1139 阅读 · 0 评论 -
NYOJ 1068 ST(线段树插线问线)
题目:NYOJ 1068 ST其实线段树题目贵在对树的操作有一个清晰的认识,那些事需要回溯的时候维护的,那些是可以直接维护的,如果能够直接维护就不要放到回溯的时候,这样操作简单,不容易出错。比如这道题目,更新的时候是给【 l,r 】都加上一个值val,查询的时候成段查询一段的和喝一段的中奇数的个数。我们在建树的时候通过回溯求出初始值的和和奇数的个数,然后更新的值就可以直接维护了,每次给某一段加一个值原创 2015-10-12 14:22:41 · 693 阅读 · 0 评论