![](https://img-blog.csdnimg.cn/20201014180756926.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
线段树
文章平均质量分 79
阿狸是狐狸啦
这个作者很懒,什么都没留下…
展开
-
HDU - 4027 线段树
线段树中等题题意:n个数,两种操作:0 b c表示将[b,c]区间的数开方,1 b c表示询问[b,c]区间的和。开始总是超时然后借鉴了别人的博客,有两个坑点一个是输出,还是一个是b可能大于c,这时要把他俩交换一下。还有本题主要思路是能想到long long 范围的数开根号最多不超过7次。具体看代码#include #include #include原创 2017-09-02 18:34:34 · 181 阅读 · 0 评论 -
hdu6278 (二分+主席树或者莫队+二分树状数组)
题意:查询区间l,r中最的大x,满足区间中大于等于x的的数量大于x。思路:二分答案,然后主席树查询第(r-l+1)-mid+1大和mid比较即可。#include <bits/stdc++.h>using namespace std;typedef long long ll;int ran[100005],root[100005];struct node{ int...原创 2019-02-25 16:23:31 · 241 阅读 · 0 评论 -
hdu 5919(主席树)
思路:主席树的模板题目,我们倒着插入题目就变成了,查询区间不同数的个数k,然后查询区间第(k+1)/2大。写了一下午,发现初始化写错了,初始化的cnt应该是1,还有数组大小要开36倍左右,我刚开始开的20倍一直tle。#include <stdio.h>#include <string.h>#include <algorithm>;const int...原创 2018-09-14 19:15:41 · 363 阅读 · 0 评论 -
2018 icpc南京网络赛G(线段树)
思路:因为只有1e5的数据。我们可以模拟一下所有情况全算出来,把答案存下来即可。但会一遍一遍的遍历超时,我们可以优化遍历的方式,因为只有1e5的房间,我们每次找的房间都是小于当前新灯泡数且最前面的房间。这个查找用一颗线段树既可以解决。我们每次找到一个满足的房间就让当前灯泡是减去这个房间的灯泡数,然后让当前房间的灯泡数设成无穷大,更新一下线段树即可。#include <iostrea...原创 2018-09-03 19:46:31 · 477 阅读 · 0 评论 -
hdu2665 spoj3267 (主席树入门)
主席树实质相当于每个前缀建立一颗线段树,因为相邻的前缀相比较只是差了一个数字,所以可以利用上一个前缀的线段树的有用信息来构成当前缀的线段树。主席树查询静态区间第k大。#include<stdio.h>#include<algorithm>#define N 100010using namespace std;struct TR{ int sum,l,r;...原创 2018-08-30 12:03:19 · 120 阅读 · 0 评论 -
HDU 6406 Taotao Picks Apples (线段树)
题意:给出n个苹果树的高度,taotao从第一个苹果开始摘苹果,他只能摘当前高度大于前面所有苹果树的苹果。若干次查询每次他会问你如果把第q颗树的苹果高度改为p,他可以摘多少苹果。思路:维护两个数组,pre从1位置到i能摘多少苹果,back记录从i位置开始到结尾能摘多少苹果。第一个数组很好维护,第二个数组我们需要找前面第一个大于他的位置,那么就涉及到区间最值查询,可以用线段树解决。维护好...原创 2018-08-23 17:07:32 · 174 阅读 · 0 评论 -
hdu2665 (划分树_查询区间第k大)
测板子的题目。划分树理解起来很容易,和线段树差不多,注意查询函数的下标很容易写错。#include <stdio.h>#include <algorithm>#include <string.h>#include <iostream>using namespace std;#define maxn 100005int t[20][maxn...原创 2018-06-08 14:34:58 · 163 阅读 · 0 评论 -
HYSBZ - 2243 染色 (树链剖分)
题意:1、将节点a到节点b路径上所有点都染成颜色c;2、询问节点a到节点b路径上的颜色段数量(连续相同颜色被认为是同一段),如“ 112221 ” 由3段组成:11 、222 和1 。区间更新,区间查询。很容易写错,开始cnt忘记清零找了一小时。r不小心写成l又找半小时。。。一定要细心,这种题出错很难找。#include #include #include using原创 2018-01-28 12:27:28 · 165 阅读 · 0 评论 -
LightOJ - 1348 Aladdin and the Return Journey(树链剖分)
题意:给一个树和树上点的权值,两个操作0 a b 查询a到b的权值和1 a b 把点a修改为b/*题意:给一个树和树上点的权值,两个操作,一个是将点的权值修改,一个是询问u到v的点权和*/#include #include #include #include using namespace std;#define maxn 300050int dep[maxn],原创 2018-01-27 14:20:19 · 141 阅读 · 0 评论 -
HYSBZ - 1036 (树链剖分单点更新,区间求和and最大值)
题意:n个点的树CHANGE u t : 把结点u的权值改为t QMAX u v: 询问从点u到点v的路径上的节点的最大权值 QSUM u v: 询问从点u到点v的路径上的节点的权值和基础树剖#include #include #include #include using namespace std;/*一些操作: I. CHANGE u t : 把结点u的权值原创 2018-01-26 16:41:29 · 173 阅读 · 0 评论 -
FZU - 2082 过路费(树链剖分)
n个点,n-1条边,m次查询。1 a b 代表查询 a点到b点路径权值和。0 a b代表把第a条边权值更新为b单点查询,区间更新,树剖裸题。树剖代码量太大,写错一个变量可能就要就要查半天注意用long long#include #include #include #include #include #include using namespace std;/*0原创 2018-01-25 16:38:46 · 208 阅读 · 0 评论 -
poj 2763 Housewife Wind 【修改边,查询区间】
树链剖分第二题,因为建树的一些错误debug了一天。可以用下节点表示边,n个节点去掉根节点正好有n-1条边。/*第一行三个整数n,q和s表示点数,操作数和当前位置,之后n-1行每行三个整数a b c表示a,b之间有一条权值为c的边,最后q行每行一个操作 0查询 1修改边 */#include #include #include #include using原创 2018-01-23 12:14:56 · 114 阅读 · 0 评论 -
树链剖分
学习树剖之前要先有线段树,还有dfs序这两个前置技能。我们知道对于线性结构的区间更新,单点查询这类题目需要用到树形结构,然而如果对一个树形结构区间更新,单点查询该怎么办呢,而树链剖分就是把树形结构哈希成线性结构,然后套用线段树求解。树剖的基本概念:重链:链接当前节点son数组的链。dep:当前节点的深度siz:当前节点的所有子节点个数son:当前节点的子节点中size最大的原创 2018-01-21 11:30:09 · 92 阅读 · 0 评论 -
HDU 3966 Aragorn's Story(树链剖分,区间修改,单点查询)
区间修改,单点查询,很容易想到线段树,树形结构的线段树可以用树链剖分。#include #include #include #include #include using namespace std;#define maxn 50005int val_pre[maxn],val[maxn],siz[maxn],son[maxn],id[maxn],fa[maxn];int to原创 2018-01-21 11:40:47 · 200 阅读 · 0 评论 -
fzu-2105(线段树区间更新)
题意:区间有三种二进制操作,区间中的值不超过16,然后查询区间和。因为每个数很小,所以区间内存在大量重复值,并且经过二进制操作后区间中相等的值会越来越多。我们只需要记录当前区间中的值是否相等即可。#include <stdio.h>#include <string.h>#include <iostream>#include <algorithm...原创 2019-03-26 14:45:40 · 225 阅读 · 0 评论