主要解决的问题 对于n个数,有修改和查询操作 单点修改区间查询(对于第i个数增加或减少一个值,然后求一个区间的值,这个区间也可以是一个点) 区间修改单点查询 (对于一个区间都增加或减少一个值,然后求一个点的值,这类题我们让每个点先记录的是和前面值的差,那么一个点的前缀和就是这个点的值,对于修改一个区 ...
分类:
编程语言 时间:
2019-01-13 18:02:40
阅读次数:
149
转自:https://www.cnblogs.com/wangfengming/articles/8064956.html#label8 阅读目录 一 简单查询 二 条件查询 三 区间查询 四 集合查询 五 模糊查询 六 排序查询 七 聚合函数 八 分组查询 九 分页查询 十 正则表达式 十一 SQ ...
分类:
数据库 时间:
2019-01-05 20:03:45
阅读次数:
245
"【HDU4622】Reincarnation" 一眼似乎不可做,但发现$strlen(x)$很小,暴力$O(n^2)$预处理每个区间$(l,r)$,查询时$O(1)$输出就好了 cpp include include include include include typedef int LL; ...
分类:
其他好文 时间:
2018-12-31 11:25:06
阅读次数:
192
Ⅱ、预备知识 树链剖分,又叫重链剖分,树剖。顾名思义,就是在树上将树划分为一条条链,然后进行树上修改与查询操作(针对于结点操作,边权操作后面会讲),用线段树来维护保证时间复杂度( "数据结构模板" )。一般来说,可以支持以下几种操作: 1、树上路径区间修改 2、树上路径间的区间查询(如点权之和,最大 ...
分类:
其他好文 时间:
2018-12-30 23:22:51
阅读次数:
349
题意: 区间+k,查询=c的个数(c一开始给定) 1.当k为正数 2.不保证k为正数 题解: 两个的复杂度是不一样的 1的话显然每个数只会成为1次c 我们记录区间比c小的最大值就可以了 每次进入一个区间当且仅当这个区间有+k>c的数 复杂度$nlogn$ 2的话我们考虑分块 里面开个数组维护一下从小 ...
分类:
其他好文 时间:
2018-12-19 15:57:22
阅读次数:
168
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3779 RELEASE操作可以对应LCT的 access,RECENTER则是 makeroot; 考虑颜色数,把一条实边变成虚边,子树+1,虚变实子树-1; 但有换根操作,怎么维护子树? 也可 ...
分类:
编程语言 时间:
2018-12-15 23:55:50
阅读次数:
319
题解: 首先这个东西因为强制在线区间查询 所以外面得套线段树了 然后考虑几条线段怎么判定 我们只需要按照右端点排序,然后查询的时候查找最右节点的前缀最大值就可以了 然后怎么合并子区间信息呢 (刚开始我很zz的觉得应该要线段树合并。。) 线段树都保证了区间一样大每个点暴力也就会算log次。。 于是就直 ...
分类:
其他好文 时间:
2018-12-11 18:43:48
阅读次数:
166
题解: 傻逼题 直接从左向右扫描每个点作为右端点 然后单点修改区间查询就行了 另外一种更直观的做法就是$(i,j)$之间产生了$(j-i)$ 于是变成矩形查最大值,kd-tree维护 代码: ...
分类:
其他好文 时间:
2018-12-11 11:32:36
阅读次数:
171
题解: 线段树经典应用 首先暴力$f[i][j]$表示考虑前i位分成j段的最大值 转移$f[k][j-1]+cost(k+1,i)$枚举k转移 不同数的经典套路就是从它到它前驱这一段 于是维护每个数前驱然后线段树区间+1区间查询最大值就可以了 ...
分类:
其他好文 时间:
2018-12-11 11:29:52
阅读次数:
148
我们今天来讲一个应用比较广泛的数据结构——树状数组 它可以在O(nlogn)的复杂度下进行单点修改区间查询,下面我会分成三个模块对树状数组进行详细的解说,分别是树状数组基本操作、树状数组区间修改单点查询的实现、树状数组查询最值的实现 一. 树状数组一般分为三种操作,初始化、修改、查询 在讲基本操作之 ...
分类:
编程语言 时间:
2018-12-09 16:43:28
阅读次数:
229