
-----数据结构-----
文章平均质量分 55
Sdywolf
沃是一只蒟蒻
展开
-
BZOJ1012
Description 现在请求你维护一个数列,要求提供以下两种操作:1、 查询操作。语法:Q L 功能:查询当前数列中末尾L个数中的最大的数,并输出这个数的值。限制:L不超过当前数列的长度。2、 插入操作。语法:A n 功能:将n加上t,其中t是最近一次查询操作的答案(如果还未执行过查询操作,则t=0),并将所得结果对一个固定的常数D取模,将所得答案插入到数列的末尾。限制:n是非负整数并且在长整原创 2017-05-04 20:57:54 · 436 阅读 · 0 评论 -
BZOJ1036--树链剖分模板
Description 一棵树上有n个节点,编号分别为1到n,每个节点都有一个权值w。我们将以下面的形式来要求你对这棵树完成一些操作: I. CHANGE u t : 把结点u的权值改为t II. QMAX u v: 询问从点u到点v的路径上的节点的最大权值 III. QSUM u v: 询问从点u到点v的路径上的节点的权值和 注意:从点u到点v的路径上的节点包括u和v本身代码如下:原创 2017-04-17 20:42:57 · 342 阅读 · 0 评论 -
HDU1890-SplayTree
题目描述 给你一个序列,第i次操作是把第i个数到第i小的数这段区间翻转,即第i次操作把第i小的数一次翻转到第i个位置,最终序列会变成升序的(注意:如果有相同的数,那么在初始序列中靠前的在最终序列也靠前,即相同的数相对位置不变),每次操作前输出第i小的数所在的位置。 题解: 如果每次直接找整个数列第i小的数,需要树套树,其实,只要每次把第i个数翻转到第i个位置后,下一次操作需要翻转的数就是剩下的原创 2017-04-16 17:43:24 · 475 阅读 · 0 评论 -
SplayTree--BZOJ1500
这是一个Splay模板题,适合用来连代码能力#include<cstdio>#include<cstring>#include<algorithm>#define INF -1e9#define maxn 500006using namespace std;struct node{ node* ch[2]; int key,num,sum,maxs,maxl,maxr,t原创 2017-04-07 21:47:10 · 396 阅读 · 0 评论 -
可并堆之左偏树
左偏树可并堆,就是支持合并,并且满足堆性质的二叉树,先不管如何来实现合并,假设我们已经维护好了这样的数据结构,如何来实现堆应该有的操作: 插入:插入一个节点可以看成把一个单个节点的堆(单点显然满足堆性质)和堆进行合并 删除根:可以看成把根的左子树和右子树合并 所以,可并堆只需要一个操作:合并,就可以实现所有堆应该有的操作。原创 2017-02-16 11:03:51 · 584 阅读 · 1 评论 -
BZOJ 2086--[Poi2010]Blocks【单调栈】
Description给出N个正整数a[1..N],再给出一个正整数k,现在可以进行如下操作:每次选择一个大于k的正整数a[i],将a[i]减去1,选择a[i-1]或a[i+1]中的一个加上1。经过一定次数的操作后,问最大能够选出多长的一个连续子序列,使得这个子序列的每个数都不小于k。 总共给出M次询问,每次询问给出的k不同,你需要分别回答。题解首先,题目的什么操作都是假的,将一个数加一,一个数减原创 2017-07-14 09:42:43 · 468 阅读 · 0 评论 -
HDU 5726--GCD【倍增】【单调栈】【STL-map】
DescriptionGive you a sequence of N (N≤100,000)integers:a1,…,an(0<ai≤1000,000,0000<ai≤1000,000,000). There are Q(Q≤100,000Q≤100,000) queries. For each query l,r you have to calculate gcd(al,,al+1,…,ar)原创 2017-07-15 15:36:21 · 435 阅读 · 0 评论 -
洛谷[P3616] 富金森林公园【数据结构】【线段树】【树状数组】
Description博艾的富金森林公园里有一个长长的富金山脉,山脉是由一块块巨石并列构成的,编号从1到N。每一个巨石有一个海拔高度。而这个山脉又在一个盆地中,盆地里可能会积水,积水也有一个海拔高度,所有严格低于这个海拔高度的巨石,就会在水面下隐藏。由于地壳运动,巨石的海拔高度可能会随时变化,每次一块的巨石会变成新的海拔高度。当然,水面的高度也会随时发生变化。因为有这样奇妙的地质奇观,吸引了很多游客原创 2017-08-02 22:16:48 · 648 阅读 · 0 评论 -
树状数组--区间加单点询问
我们知道,线段树用来做单点修改是很方便的,那么,既然这么方便,为什么不能用它来做区间修改呢?好吧,我们来试试看:首先不难想到要把区间修改转化为前缀修改,即,将把[L,R]\left[L,R\right]这段区间加kk,变成把[1,R]\left[1,R\right]加k,再把[1,L−1]\left[1,L-1\right]减去kk,这显然是正确的。那么我们来考虑如何维护这个东西,考虑AiA_i表示原创 2017-08-03 22:31:08 · 443 阅读 · 0 评论 -
BZOJ 4034: [HAOI2015]树上操作【树链剖分】【DFS序】
Description有一棵点数为 N 的树,以点 1 为根,且树点有边权。然后有 M 个 操作,分为三种: 操作 1 :把某个节点 x 的点权增加 a 。 操作 2 :把某个节点 x 为根的子树中所有点的点权都增加 a 。 操作 3 :询问某个节点 x 到根的路径中所有点的点权和。题解显然,树链剖分的序也是DFS序,直接维护就可以了。代码#include<cstdio>#include<原创 2017-10-18 19:32:50 · 373 阅读 · 0 评论 -
树链剖分
我们先来看这样一个问题: 给出一棵树,每个节点有一个权值,每次操作可以修改某一节点的权值,或是询问任意两点间路径上的最大值或是权值和,要求复杂度为O(nlogn)n为点数。 由于有修改操作,使得不能使用预处理(倍增数组)来实现快速查询,树链剖分就可以通过把树剖分成一些链,对于链上的节点,可以用原创 2017-04-17 09:24:33 · 300 阅读 · 0 评论 -
BZOJ1058-SplayTree
Description 小Q的妈妈是一个出纳,经常需要做一些统计报表的工作。今天是妈妈的生日,小Q希望可以帮妈妈分担一些工 作,作为她的生日礼物之一。经过仔细观察,小Q发现统计一张报表实际上是维护一个可能为负数的整数数列,并 且进行一些查询操作。在最开始的时候,有一个长度为N的整数序列,并且有以下三种操作: INSERT i k 在原数 列的第i个元素后面添加一个新元素k; 如果原数列的第i原创 2017-04-14 15:50:45 · 470 阅读 · 0 评论 -
SPOJ1825--点分治
Description After the success of 2nd anniversary (take a look at problem FTOUR for more details), this 3rd year, Travel Agent SPOJ goes on with another discount tour.The tour will be held on ICPC isla原创 2017-04-23 20:17:50 · 375 阅读 · 0 评论 -
COCI 2010/2011 6th round--STEP【线段树】
DescriptionMirko and Slavko started taking tap dance lessons. This dance consists mostly of tapping the floor with a special kind of shoe. Since Mirko and Slavko are fast learners, they decided to com原创 2017-07-12 10:55:08 · 764 阅读 · 0 评论 -
并查集【路径迭代】HDU 3038 How Many Answers Are Wrong
Problem DescriptionTT and FF are … friends. Uh… very very good friends -__-bFF is a bad boy, he is always wooing TT to play the following game with him. This is a very humdrum game. To begin with, TT s原创 2017-07-04 10:14:32 · 309 阅读 · 0 评论 -
平衡树——Treap
对于一棵Treap,要使它的键值的中序遍历为升序,并且,优先级满足堆的性质(即父节点大于左右儿子),在插入一个值后,就随机送一个优先级,由于可以证明,在随机插入顺序下,树的深度期望是logn,所以,只要我们能够在每次操作后能够保证Treap的性质,那么它单次操作的复杂度就是期望logn原创 2017-03-10 21:01:50 · 506 阅读 · 0 评论 -
BZOJ1588[HNOI2002]营业额统计
这题就是Treap的模板题,每次先求前驱再求后继然后两个数与输入的数之差最小的就是需要累计的答案。 代码:#include<cstdio>#include<cstring>#include<algorithm>#include<cstdlib>#include<cmath>#define maxn 60006using namespace std;struct node{ n原创 2017-03-13 20:53:05 · 317 阅读 · 0 评论 -
平衡树之SplayTree
SplayTree,即伸展树,是竞赛中很常用的一种平衡树,它可以实现序列的分裂合并,并且保证均摊复杂度是O(nlogn)。 与Treep类似的,SplayTree也是基于旋转的,Splay,即伸展操作的实质就是在一棵子树中找到一个节点并把它旋转到根,复杂度靠谱的Splay有三种旋转(注意不要擅自修改旋转的方式,因为SplayTree复杂度的证明正是基于它的旋转方式的,否则可能会变成复杂度不靠谱的原创 2017-04-08 21:32:07 · 590 阅读 · 0 评论 -
POJ1741--Tree[平衡树]
利用启发式合并的优良性质实现可靠的暴力原创 2017-03-27 19:29:12 · 818 阅读 · 1 评论 -
Codeforces 452F Permutation【线段树】【哈希】
DescriptionYou are given a permutation of numbers from 1 to n. Determine whether there’s a pair of integers a, b (1 ≤ a, b ≤ n; a ≠ b) such that the element (note, that it is usual division, not integ原创 2017-10-05 21:31:24 · 645 阅读 · 0 评论