
线段树
YihAN_Z
ただのあほです
展开
-
洛谷U3981 语文 DFS序+线段树
题目大意:对于一个有根树有n个结点,每个结点上都有权值。一共有q次操作,分别为以下两种: 1.将以结点i为根的子树除i之外的点的重要度增加delta 2.询问当前点重要度。 数据范围:n<=5*10^5,q<=10^6,delta<=10^3 对于30%的数据n<=500,q<=1000.对于30%的数据,直接模拟在树上的修改即可,最坏情况单次修改达到O(n) 本题中,要修改一棵子树上的所原创 2016-08-09 09:26:02 · 519 阅读 · 0 评论 -
BZOJ 1858 [Scoi2010]序列操作 线段树
题目大意:给出长度为n的0/1序列,要求支持:区间赋值(0/1),区间取反,查询区间和、区间最长连续1个数。线段树练手题,今天闲来无事打算水一水,然后发现这个真的够屎..维护赋值标记、翻转标记,注意在赋值时清空翻转标记,判断好翻转与赋值的关系,细节见代码。 在赋值时记得把相反的清空(以为指针比数组快很多于是写到一半把数组改成指针,然而Rank前100都没挤进去…可能是因为我的线段树太屎了吧0.0#原创 2017-04-09 23:09:30 · 367 阅读 · 0 评论 -
BZOJ 3221 [Codechef FEB13] Obserbing the tree树上询问 树链剖分 主席树维护区间加等差数列
题目大意:给出一棵树,每个结点初始均为0,要求支持以下操作:路径加等差数列,询问路径上结点权值和,回到之前的某个版本调到吐血。很明显可以看出需要树链剖分+主席树来解决,由于需要在主席树上区间修改所以标记永久化。 区间维护等差数列需要在每个结点上维护 首项 和 公差。 树链剖分时在路径上加等差数列需要讨论,细节比较多,详见代码。 (我看错题了..注意回到某个版本并不舍弃在这之间的版本)#incl原创 2017-04-02 00:15:30 · 776 阅读 · 0 评论 -
BZOJ 4399 魔法少女LJJ 线段树合并
题目大意:第一行有一个正整数m,表示操作个数。 接下来m行,每行先给出1个正整数c。 若c=1,之后一个正整数x,表示新建一个权值为x的节点,并且节点编号为n+1(当前有n个节点)。 若c=2,之后两个正整数a,b,表示在a,b之间连接一条边。 若c=3,之后两个正整数a,x,表示a联通块内原本权值小于x的节点全部变成x。 若c=4,之后两个正整数a,x,表示a联通块内原本权值大于x的节点原创 2017-04-14 14:43:25 · 507 阅读 · 0 评论 -
BZOJ 3531 [SDOI2014]旅行 树链剖分+线段树
题目大意:给定一棵节点为n的树,每个节点有一个颜色c(c<=n)和权值(正整数)。实现以下操作: 1.修改某个点的颜色 2.修改某个点的权值 3.询问两点间与这两个点同颜色的最大值 4.询问两点间与这两个点同颜色的和 保证询问的两点同色挺简单的一道树链剖分+线段树。给每个颜色开一个线段树,不过要动态开内存。空间复杂度O(nlogn)。 树链剖分一定要注意最后x,y两点在同一链上时也要统计原创 2016-12-11 15:59:02 · 446 阅读 · 0 评论 -
BZOJ 3685 普通van Emde Boas树 zkw线段树
#include <cstdio>#define N 4000005#define ls(x) (x<<1)#define rs(x) (x<<1|1)#define pa(x) (x>>1)using namespace std;namespace IStream { char get_char() { const int L=1<<15; st原创 2017-06-28 17:12:49 · 515 阅读 · 0 评论 -
BZOJ 3064 Tyvj 1518 CPU监控 线段树维护历史最大值
题目大意:给出一个数列要求支持:查询区间最大值,查询区间历史最大值,区间加,区间修改原创 2017-06-16 09:31:30 · 764 阅读 · 0 评论 -
BZOJ 4756 [Usaco2017 Jan]Promotion Counting 线段树合并
题目大意:给出一棵有根树,每个点有一个权值,问对于每一个点的子树中比这个点大的点的个数。首先权值很大需要离散化。 对于每一个点建一个权值线段树。遍历每一棵子树,然后将子树的线段树合并到自己的线段树上,在查询之后将自己插入。时间复杂度O(nlog2n)#include <cstdio>#include <cstring>#include <algorithm>#define N 100005原创 2017-04-12 16:13:35 · 912 阅读 · 0 评论