
主席树
sedcftyv
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
主席树
主席树+离散1.利用前缀和性质,建立n棵权值线段树(1-i区间内有几个数离散化后的值在树上每个结点对应区间内)2.查询i到j区间只需将第j棵树减去第i-1棵树,得到表示i到j区间内情况的树,线段树查询即可。建树O(nlogn),查询每次O(logn)注意:待修主席树为了修改方便(和建树共用一个函数),开点时常用if(!rt) rt=con-1;这样修改的时候不会新开节点。 ...原创 2019-09-21 21:52:14 · 90 阅读 · 0 评论 -
带修主席树(动态逆序对)
树状数组套权值线段树1.树状数组每个节点的值为该区间内权值线段树的根结点。2.每棵权值线段树储存其根节点对应树状数组中所表示的区间内的值离散化后在线段树对应各区间内的的个数。3.先边输入初始序列边求出初始逆序和,每次询问先输出一次逆序和,再删该数。修改查询如何求初始逆序和:1.每次输入序列中一个数后,查询该数前面(包括该数)小于等于该数的数的个数,用当前数的位置(即当...原创 2019-10-01 23:00:47 · 414 阅读 · 0 评论 -
P3302 森林
主席树+倍增 先建好初始状态的主席树和倍增数组,之后每次加边把结点少的树合到结点多的树上,每次合并都要新开结点,所以数组开大点 注意:动态树建倍增数组要把终止条件从log[deep]改为上限19或者更大,因为同一个点的深度会发生变化,如果每次修改不彻底,倍增数组残留的值可能不为0,lca的时候会导致跳过头#include<iostream>#include&...原创 2019-10-04 22:45:23 · 99 阅读 · 0 评论 -
P3168 任务查询系统
区间修改+单点查询利用时间点建树,因为主席树建树时第i结点会继承第i-1个结点的信息,可以只修改区间端点使每个时间点对应的树恰好表示该时间的任务优先级情况。1.把区间端点全部放入数组task中排序,起始点时间不变,结束点时间加一。2.按时间从1到n建树,每次建树把task中所有时间为i的结点建到树里,起始点加入树(标记为1),结束点在树中减去(标为-1)3.直接查询时间点对应的那棵...原创 2019-10-05 13:21:15 · 212 阅读 · 0 评论 -
P3313 [SDOI2014]旅行(计时器)
树链剖分+动态开点的线段树 树剖好以后每个宗教建一棵线段树,把初始状态每个城市插入树中。 查询时边求LCA边在线段树中查询。#include<iostream>#include<cstdio>#include<cstring>#include<Windows.h>using namespace std;int wi[1...原创 2019-10-06 09:45:56 · 103 阅读 · 0 评论