----------数据结构----------
文章平均质量分 64
IcePrincess_1968
这个作者很懒,什么都没留下…
展开
-
BZOJ2957: 楼房重建 题解
线段树的高级操作首先肯定将每个点化成斜率来算我们考虑在线段树的每个节点记录一个sum[k],表示如果当前只有这个节点范围内的那些楼房,完全不考虑这个区间之外的楼房,能看到多少个楼房那么显然在单点更新的时候,更新的是线段树上一条链上的节点,那么没有被更新到的节点sum值是不会变的,所以每次更新只会有logn个sum被更新考虑如果sum[k]的孩子的sum都已经计算好了,该如何更新sum[k]的值首先...原创 2018-03-15 22:54:10 · 261 阅读 · 0 评论 -
Codeforces #316E3: Summer Homework 题解
这样的题肯定要维护线段树,重点是如何维护裴波那契数列使得可以很快的进行合并操作 这里给出一个很骚的操作: 对于每个区间维护两个值: 1. f0∗al+f1∗al+1+...f0∗al+f1∗al+1+...f_0*a_l+f_1*a_{l+1}+... 2. f1∗al+f2∗al+1+...f1∗al+f2∗al+1+...f_1*a_l+f_2*a_{l+1}+... 我们发现这个序...原创 2018-05-01 11:36:20 · 443 阅读 · 0 评论 -
AtCoder Regular Contest 076F: Exhausted? 题解
首先需要知道Hall定理: 设二分图G的左边节点集合为AAA,右边节点集合为BBB,那么G存在完美匹配的充 要条件是 对于∀X∈A,∣X∣≤∣Γ(X)∣∀X∈A,∣X∣≤∣Γ(X)∣\forall X\in A,\mid X\mid \leq \mid \Gamma(X)\mid 其中Γ(X)Γ(X)\Gamma(X)表示集合BBB中所有与XXX中至少一点相邻的点的集合...原创 2018-04-27 09:21:06 · 213 阅读 · 0 评论 -
AtCoder Regular Contest 097D: Equals 题解
我们可以把这种交换规则想象成一张图,有一个NNN个点的图,题目中的(xi,yi)(xi,yi)(x_i,y_i)相当于图中的边 我们可以发现一个连通块内的元素是可以任意互换位置的 所以对于每一个a[i]a[i]a[i],我们只要判断第iii个格子和第a[i]a[i]a[i]个格子是否联通就好,用并查集可以轻松的做到这一点#include <bits/stdc++.h>us...原创 2018-05-14 15:39:01 · 396 阅读 · 1 评论 -
CodeChef QRECT: Rectangle Query 题解
这题的思路还是挺巧妙的 最关键的一步是我们改求与当前矩形不相交的矩形个数 那么显然可以容斥,用完全在上面的+下面的+左面的+右面的-四个角上被重复算的 前面的四个比较好搞,以上面举例,插入矩形时把矩形的下边界插入树状数组,查询时抓住当前矩形的上边界在树状数组里查就好了 四个角的部分,以左上角为例,插入矩形时把矩形的右下角记录下来,查询时查矩形的左上角的左上方有多少个点 所以现在相当于要实...原创 2018-05-25 23:49:32 · 581 阅读 · 4 评论 -
51Nod1766: 树上的最远点对 题解
这题用到了树的直径的非常好的性质,有必要记录 树的直径满足这样一个性质: 设一棵树的一个点集SSS的直径的端点集合是{a1,b1a1,b1a_1,b_1}(如果有多条直径选取任意一条),另一个点集TTT的直径的端点集合是{a2,b2a2,b2a_2,b_2},则点集S⋃TS⋃TS\bigcup T的直径的端点集合{a3,b3a3,b3a_3,b_3}∈∈\in{a1,b1,a2,b2a1,b1...原创 2018-07-11 23:16:04 · 323 阅读 · 0 评论 -
HDU6305: RMQ Similar Sequence 题解
DescriptionChiaki has a sequence A={a1,a2,…,an}. Let RMQ(A,l,r) be the minimum i (l≤i≤r) such that ai is the maximum value in al,al+1,…,ar.Two sequences A and B are called \textit{RMQ Similar}, if...原创 2018-07-23 23:41:24 · 473 阅读 · 0 评论 -
BZOJ3196: 二逼平衡树 题解
Description您需要写一种数据结构(可参考题目标题),来维护一个有序数列,其中需要提供以下操作: 1.查询k在区间内的排名 2.查询区间内排名为k的值 3.修改某一位值上的数值 4.查询k在区间内的前驱(前驱定义为小于x,且最大的数) 5.查询k在区间内的后继(后继定义为大于x,且最小的数)Input第一行两个数 n,m 表示长度为n的有序序列和m个操作 第二行...原创 2018-07-14 23:11:20 · 355 阅读 · 0 评论 -
BZOJ3282: Tree 题解
LCT的模板题,学splay和LCT合起来花了两三天 LCT的核心就是用splay维护preferred path,preferred path定义为上次access操作所经过的那些边,access操作的本质是打通当前点到树的根 这题要求删边,加边和维护一条链上的xor和 对于加边(u,v):makeroot(u),fa[u]=v即可,注意虽然这时fa[u]=v,但是u并不是v的儿子,u和v...原创 2018-07-26 22:30:49 · 295 阅读 · 0 评论 -
BZOJ3223: 文艺平衡树 题解
平衡树模板题(其实想练模板最好还是维修数列。。。) 对每个节点维护一个旋转标记就好了#include <cstdio>#include <iostream>#include <cstring>#include <string>#include <cstdlib>#include <utility> #in...原创 2018-04-05 20:55:07 · 194 阅读 · 0 评论 -
BZOJ2006: 超级钢琴 题解
非常好的锻炼思维的题目 这样的题目的一般套路肯定是将这些超级旋律分成若干类,刚开始在每一类里面选一个最大的放进优先队列,每次取出最大的一个以后在它所在的类中再挑几个candidate扔进优先队列 我们可以考虑把起点相同的超级旋律放在一起考虑 我们定义操作(i,l,r)返回起点在i,终点在l~r之间的所有超级旋律中值最大的超级旋律的值和位置 刚开始我们对每个起点i,把(i,i+L-1,i+R...原创 2018-04-11 22:46:04 · 230 阅读 · 0 评论 -
Codeforces #319E: Ping-Pong 题解
这道题给的一个条件十分奇怪:区间(a,b)能转移到区间(c,d)当且仅当 c<a<dc<a<dcc<b<dc<b<dc⊂⊂\subset (c,d)这两种情况又有区别:第一种情况下(a,b)和(c,d)互相联通,而第二种情况只能(a,b)–>(c,d). 如果说第一种情况可以用并查集维护的话,第二种情况就十分难处理另外题目有一个特殊的...原创 2018-03-28 22:40:44 · 511 阅读 · 0 评论 -
SPOJ GSS3: Can you answer these queries III 题解
线段树裸题(写这道题是为了复习板子的)每个节点记录左起max,右起max,总max和sum更新方法见代码#include <cstdio>#include <iostream>#include <cstring>#include <string>#include <cstdlib>#include <utility>...原创 2018-03-19 20:21:51 · 429 阅读 · 0 评论 -
SPOJ GSS6: Can you answer these queries VI 题解
平衡树裸题(我写这道题目是练板子的)平衡树的每个节点上维护lmax,rmax,max,sum,sz具体更新见代码#include <cstdio>#include <iostream>#include <cstring>#include <string>#include <cstdlib>#include <utility...原创 2018-03-19 21:51:25 · 385 阅读 · 0 评论 -
POJ2104: K-th Number 题解
主席树裸题(我写这题是练板子的)维护权值主席树,要记得离散化#include <cstdio>#include <iostream>#include <cstring>#include <string>#include <cstdlib>#include <utility>#include <cctype&g原创 2018-03-19 23:44:23 · 216 阅读 · 0 评论 -
SPOJ GSS7: Can you answer these queries VII 题解
树链剖分+线段树维护裸题注意可以不取,就是如果一个序列全是负数答案是0程序写的很丑#include <cstdio>#include <iostream>#include <cstring>#include <string>#include <cstdlib>#include <utility>#include &...原创 2018-03-20 20:20:51 · 352 阅读 · 0 评论 -
BZOJ2733: 永无乡 题解
考虑线段树合并,初始的时候对每个点建一棵动态开点线段树,merge两棵线段树的时候只要像这样操作:如果root1和root2中有一个为0,则直接返回另一个递归的调用merge处理左子树和右子树下面简证这样的复杂度是O(nlogn)O(nlogn)O(nlogn) 刚开始每棵线段树中只有一个元素,所以每棵线段树只有lognlognlogn个节点,所以刚开始的总结点数是nlognnlo...原创 2018-04-09 13:29:58 · 208 阅读 · 0 评论 -
ZOJ4009: Another Data Structure Problem 题解
这样的题看起来挺套路的,有乘方还有模数,很容易想到应该会循环 利用费尔马小定理an−1=1(modp)an−1=1(modp)a^{n-1} = 1\pmod p 打表,会发现48次之后指数循环 于是可以维护一个48层的线段树,这道题就解决了 有可能会被卡常,可以只在修改的时候pushdown,询问的时候直接将节点的祖先们的lazy相加,这样会快一倍,就能过了#include <...原创 2018-04-03 15:23:01 · 236 阅读 · 0 评论 -
ZOJ4008: Yet Another Tree Query Problem 题解
编号在l~r的点有r-l+1个,因为原图是一棵树,没有环,所以每多一条边,连通块就少1,所以我们只要求出顶点均在l~r的边的数目,最后用点数减一下就好 这个问题怎么处理呢,我刚开始想的是把所有的边抽象成平面上的一个点,横纵坐标分别代表两个端点编号,这样l~r之间的查询相当于查询一个正方形区域内有多少个点,但这个好像不能离散化,用什么二维数据结构也没用 考虑一种离线做法:将询问按照右端点排序,然...原创 2018-04-03 15:31:14 · 547 阅读 · 0 评论 -
BZOJ2743: 采花 题解
一眼看上去像莫队,但是范围是1e6,O(nn−−√)O(nn)O(n\sqrt{n})会炸 考虑离线以后用数据结构维护 其实这种技巧挺常见的,就是将询问按照右端点排序 然后枚举右端点,从右向左移动,每移动一个维护每种颜色从右向左数第二个在哪里,因为每次只会修改一种颜色,这个是很好维护的 用树状数组维护所有的颜色的“第二个”的位置的出现次数,那么对于查询[l,r],我显然要找从右向左数第二个...原创 2018-04-11 00:05:03 · 285 阅读 · 0 评论 -
HDU6315:Naive Operations 题解
DescriptionIn a galaxy far, far away, there are two integer sequence a and b of length n. b is a static permutation of 1 to n. Initially a is filled with zeroes. There are two kind of operations: ...原创 2018-07-27 23:38:23 · 405 阅读 · 2 评论