线段树
文章平均质量分 78
「已注销」
混子一个
展开
-
HDU 4027——线段树加奇怪的lazy
一看就是成段更新需要lazy,使劲一个一个更新肯定是不行的。。。思路是判断要不要更新每个区间,有的时候是不需要更新的,然后标记成lazy以后不更新就好了。。之前一直不是很理解lazy还是,现在也是略懂状态。。总之继续努力吧。。蒟蒻。。#include#include#include#includeusing namespace std;const int MAX=100000原创 2016-04-01 17:05:35 · 289 阅读 · 0 评论 -
hdu 6162 离线树链剖分
题意:一个树,点权,查询x到y路径上 价值在[a,b]之间的点的权值和思路:剖分模板题,首先要想到离线处理,第一步将查询分为query(x,y,0,b)-query(x,y,0,a);接下来我们就发现了可以按照点权的大小以及查询a的大小离线处理,这样就相当于只查询query(x,y)。。。故直接上个剖分点权的模板代码:#includeusing namespace s原创 2017-08-22 18:52:01 · 327 阅读 · 0 评论 -
hdu 6070 二分答案+线段树
题意: 区间价值为 区间元素种类数 / 区间长度 问最小价值的区间是?思路:直接求解很困难,考虑二分答案判断,注意这题的关键是将二分答案后的不等式进行变换,如官方题解。二分答案 mid,检验是否存在一个区间满足 size(l,r)/(r−l+1) ≤ mid,也就是 size(l, r) + mid × l ≤mid × (r + 1)。之后的问题就很好解决了,原创 2017-08-03 21:24:53 · 945 阅读 · 0 评论 -
hdu 5919 主席树
http://acm.hdu.edu.cn/showproblem.php?pid=5919题意: 一个数组A。。。有Q次询问,[L,R](强制在线)。。。询问区间不同数按贡献排序后组成的新数组中的n/2项是什么,贡献是指在这个区间里面最左出现的位置。思路:主席树套路题。。因为强制在线,所以使用主席树。。方法和主席树求区间不同数的方法是一样的,只需要扫一遍,PS。因为这原创 2016-10-08 19:35:28 · 297 阅读 · 0 评论 -
HDU 5869区间CGD不同种类数---树状数组+map统计区间不同种类数(离线)
http://acm.hdu.edu.cn/showproblem.php?pid=5869题意:已知一个数组,Q个查询,问你区间子区间的不同GCD种类数思路:先考虑一个数组区间不同个数,可以使用离线的树状数组实现,具体是对查询右端点进行排序,依次转移解决问题。首先我们考虑固定右端点的查询区间不同数字,其实我们可以在每个数字出现的最右位置记录一下就可以了,统计起来就是s原创 2016-09-29 19:27:49 · 467 阅读 · 0 评论 -
HDU 5875 二分+st表
http://acm.hdu.edu.cn/showproblem.php?pid=5875题意 :数组一个,Q组询问,给你l和r,问A[ l ]%A[ l+1 ]......%A[ r ] 思路:下降幅度至少模一个有用的数(比当前数小的数)下降1/2。。。所以就是找一个区间里比一个数小的最左的数字是什么。。这个问题就可以用st表+二分解决 通过ST表o1得到原创 2016-09-29 19:09:19 · 291 阅读 · 0 评论 -
HDU 5692 区间最大值+DFS序
http://acm.hdu.edu.cn/showproblem.php?pid=5692题意,一颗树,从0出发,必须经过某个节点,一个节点只能经过一次,总价值最大获得多少?思路,基础的DFS序+线段树瞎搞一下子。每个节点处理一下总价值就可以了。那么就是一个裸的区间最大值了。愉快的水一下。代码:#include #include #include #原创 2016-07-22 19:29:09 · 240 阅读 · 0 评论 -
1540-线段树区间合并操作
#include#include#include#includeusing namespace std;const int MAX=1000000;struct pr { int lsum,rsum,msum; int left,right; }tr[MAX+10];int n,m;inline int ll(int k) {r原创 2016-04-07 16:11:18 · 364 阅读 · 0 评论 -
hdu 3308-线段树基本区间合并
这题明显是线段树基本区间合并,由于第一次写也遇到了不少问题,下面将赘述。。首先对于区间合并问题,tr里面要有rsum,lsum,msum,分别表示左连续最大,右连续最大,和区间最大,为什么这么表示,当然是为了合并操作。先说pushup部分,不是简单的sum或者max了,按套路来,如果合并有特殊条件要加特殊条件,对于这道题要加判断arr[mi]和arr[mi+1],由于这原创 2016-04-06 12:22:27 · 225 阅读 · 0 评论 -
HDU5124,线段树加离散化
水题一个,但是由于自己太弱还是写了很久,线段树的理解不是很好,到现在也不是很懂pushdown的精髓,只会照猫画虎,接下来的一段日子里打算做水题的同时穿插做一些数据结构。这道题的离散化很简单,就是对于出现过的点排序即可,可以用map之类的随便搞一下,据说这个题有贪心算法,希望学习一下。最后也是压时间过得主要还是线段树理解不透彻,蒟蒻一只啊。。。#include#include#incl原创 2016-03-21 21:11:48 · 318 阅读 · 0 评论 -
hdu 6183 线段树的空间优化
题意:一个空的坐标系,有④种操作:①1 x y c表示在(x, y)点染上颜色c;②2 X y1 y2表示查询在(1, y1)到(X, y2)范围内有多少种不同的颜色:③0表示清屏;④3表示程序退出(0思路:开五十个线段树(一种颜色一个),以y为下表,保存min x,(因为查询x固定1---X)然后暴力查询50个就好了但是显然碰到了一个问题,1e6 开5原创 2017-09-07 18:27:59 · 619 阅读 · 0 评论