
线段树
文章平均质量分 72
Aaplloo
天天都想摆
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
[CF208E] Blood Cousins (线段树合并)
题意 题目 输入一个森林。mmm 个询问 xxx 点的 ppp 代近亲。 思路 维护每个点的线段树,树上维护的是 xxx 子树区间深度节点个数,父节点合并上子节点的即可。 void Dfs(LL x,LL Fa) { Dep[x] = Dep[Fa] + 1; int l = G[x].size(); for (Int i = 0; i < l; ++ i) Dfs(G[x][i], x); } inline void Build() { for (Int i = 1; i <=原创 2020-06-02 21:09:22 · 188 阅读 · 0 评论 -
[HNOI2009]梦幻布丁(线段树合并)
题意 洛谷 题目大意为:每个位置有一个颜色,有两种操作。操作一是将所有 xxx 颜色都修改为 yyy 颜色,操作二是统计序列里有多少颜色段。 思路 思路其实很明显。我们可以用链表储存信息,用启发式合并保证操作二的时间复杂度即可。 然而我用的是线段树合并,思路很简单:就用 nnn 棵线段树维护每种颜色区间位置和答案即可,因为不同颜色之间是没有影响的。使用动态开点线段树然后进行线段树合并即可。 Code: LL Ans, Root[MAXN * 10], Son[MAXN * 18][2], SonQ[MAXN原创 2020-06-02 15:39:04 · 267 阅读 · 0 评论 -
[CTSC2016]时空旅行 (线段树分治)
前言 昨天学习了线段树分治,算法比较抽象,没有学得太具体,今天做一道例题练练手 ——自闭前 题面上洛谷 题意 维护若干个集合,每个集合都是由一个编号比它小的集合加入一个二元组(x,c)(x,c)(x,c)或者删去一个元素拓展而来的。如此,集合的拓展关系之间构成一个树形结构。给出mmm次询问,给出一个kkk和XXX,询问第kkk个集合中(x−X)2+c(x-X)^2+c(x−X)2+c的最小值。 n,m<=5e5n,m<=5e5n,m<=5e5 思路 首先,如果XXX值是固定的,可以用主席树原创 2020-05-19 15:36:25 · 306 阅读 · 0 评论 -
[SDOI2011] 拦截导弹 (咕咕咕)
题目 思路 有两个子任务——最多拦截的导弹个数和每个导弹被拦截的概率。 对于子任务一: 首先,我们可以定义一个dp[i]dp[i]dp[i]为拦截了第iii个导弹的最大拦截数。 易得到:dp[i]=Max(dp[j]+1) (j<i,h[j]>h[i],v[j]>v[i])dp[i]=Max(dp[j]+1)\ (j<i,h[j]>h[i],v[j]>...原创 2020-05-18 14:50:08 · 247 阅读 · 0 评论 -
线段树分治
线段树分治 首先,这里的线段树是狭义的线段树。 而线段树分治是一种维护时间区间的数据结构,利用线段树的分治性使时间复杂度为logloglog级别。 维护时间区间的数据结构有CDQ分治、KD-Tree,那么线段树分治和它们的区别在哪里呢?其实,它就是用回退操作来实现可持久化,或者说是维护了操作会影响的时间区间。 我们考虑如何得到这个操作影响的时间区间。假设一个操作会影响的时间区间为[L,R][L,R][L,R],转移分散到线段树上是logloglog段。当回退一个操作,在线段树上找到这个询问所在的时间点。把树原创 2020-05-15 20:55:22 · 424 阅读 · 0 评论 -
[BZOJ4184] shallot (线段树分治+线性基)
题目 小苗去市场上买了一捆小葱苗,她突然一时兴起,于是她在每颗小葱苗上写上一个数字,然后把小葱叫过来玩游戏。 每个时刻她会给小葱一颗小葱苗或者是从小葱手里拿走一颗小葱苗,并且让小葱从自己手中的小葱苗里选出一些小葱苗使得选出的小葱苗上的数字的异或和最大。 这种小问题对于小葱来说当然不在话下,但是他的身边没有电脑,于是他打电话给同为Oi选手的你,你能帮帮他吗? 你只需要输出最大的异或和即可,若小葱手中没有小葱苗则输出0。 Input 第一行一个正整数nnn表示总时间;第二行nnn个整数a1,a2...ana1,原创 2020-05-15 11:57:06 · 258 阅读 · 0 评论 -
[线性基]Duff as a Queen
题目——洛谷 利用差分维护差分数组线性基即可。 #include <cstdio> #include <cstring> #include <iostream> #include <algorithm> #define MAXN 200005 #define LL int #define Int register int using namespace std; inline void read(LL &x) { x = 0; LL f = 1;原创 2020-05-14 16:06:08 · 168 阅读 · 0 评论 -
线段树
线段树学习笔记 前言 之前讲线段树的时候没有学好,平时线段树的题也做得比较少,进行一些整理。 概念 线段树,是一种二分查找树的数据结构。将一段区间划分为一些单位区间, 线段树中的每一个节点都储存了一段区间[L, R], 其中叶节点的区间 L = R。线段树的思想和二分很像,将一段大区间从中间平均分成两个区间[L, Mid], [Mid + 1, R], 小区间再分成两个更小的区间,直到该区间的L ...原创 2019-10-25 21:40:58 · 255 阅读 · 1 评论