![](https://img-blog.csdnimg.cn/20201014180756930.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构
bnc1010
这个作者很懒,什么都没留下…
展开
-
HDU 1698 线段树区间更新
Just a HookTime Limit: 4000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 42935 Accepted Submission(s): 2064Problem Description In the game of DotA, ...原创 2018-08-12 19:28:33 · 679 阅读 · 0 评论 -
hdu6191 Query on A Tree (可持久化trie)
链接参考代码:#include <bits/stdc++.h>using namespace std;const int N = 1e5 + 5;int a[N];int ch[N * 33][2];int sz[N * 33];int root[N * 33], tot;int ll[N],rr[N],mp[N];#define to first#defin...原创 2019-08-21 18:30:45 · 164 阅读 · 0 评论 -
2019 牛客 多校9 H Cutting Bamboos(主席树)
链接题意:有n个竹子,每个竹子有自己的高度h[i]h[i]h[i],h[i]∈[1,100000]h[i]\in[1,100000]h[i]∈[1,100000]有q个询问,格式为l r x y询问l到r区间内割y刀,第x刀的高度在哪。思路:以竹子的下标作为版本建主席树,把高度作为另一维(也就是主席树上的l,r),根据高度维护竹子的个数和高度和。最后二分切的高度,记一个二分的高度h...原创 2019-08-16 18:18:25 · 168 阅读 · 0 评论 -
hdu 4417 Super Mario (主席树模板)
链接题意:有n个数,q个询问。询问格式:l r k 区间[l,r]内小于等于k的个数思路:离散化加模板即可参考代码:#include <bits/stdc++.h>using namespace std;const int N=1e5+5;int ls[N],a[N];int root[N],tot;int lson[N*20],rson[N*20],sz...原创 2019-08-16 19:19:41 · 128 阅读 · 0 评论 -
Codeforces Round #569 Serge and Dining Room (权值线段树)
链接题意:有n个菜,m个人,这m个人排队买菜。每个菜有一个价格a1-an,每个人都有一些钱b1-bm。每个人在自己钱足够的情况下会购买最贵的菜,如果一个菜都买不起就不买。Serge排在队伍的最后(不包括在m个人中),求他最后可以买的最贵的菜。有两个操作:1 x y: 把第x个菜的价格变为y2 x y: 把第x个人的钱变为y操作是累积的思路:把所有出现过的价格全部离散化,以价格...原创 2019-07-14 20:16:37 · 148 阅读 · 0 评论 -
2019 hdu 多校四 K-th Closest Distance (主席树)
链接题意:给出一个数组,每次询问:l,r,p,k,数组中l到r区间内跟p的差的绝对值排名第k的。强制在线,l,r,p,k都要异或上一次的答案。思路:数组中的数不超过1e6,p也不超过1e6,那么可以不用离散,直接把数值当成权值建主席树就可以了。对于查询,给定了p,那么就二分区间的半径,查询[p-R,p+R]中的数字是否大于等于k个,若大于则缩小半径,否则扩大半径,最后的半径就是答案了...原创 2019-08-01 11:31:12 · 157 阅读 · 0 评论 -
2019牛客多校第四场 C.sequence (笛卡尔树)
文章目录A.meetingB.xorC.sequenceD. triples IA.meeting题意:一棵n个点的树上的一些点上有人,找出一个点,使得这个点到每个人的距离的最大值最小。思路:一开始看到这道题就感觉是树型dp中的换根dp模型,两个dfs,复杂度只有On,然而写起来有点麻烦。题解中是类似求树的直径的做法,比较简单。B.xorC.sequence题意:有两个长度为n的数组a...原创 2019-07-31 19:38:40 · 218 阅读 · 0 评论 -
2019 hdu 多校3 1007 Find the answer (权值线段树)
连接思路:每个点离散后,建立一棵权值线段树,维护区间的和以及区间的数字的数量。每次砍掉前面最大的几个使得剩下的数字之和<=m-x,x为当前要加进来的数字。反过来就是从小找最多的数字,使得和<=m-x。每次从权值线段树的左边找过来就好了。参考代码:#include<bits/stdc++.h>using namespace std;typedef long lo...原创 2019-07-29 20:07:07 · 151 阅读 · 0 评论 -
Cow Land (树链剖分)
测试链接题面:Cow Land is a special amusement park for cows, where they roam around, eat delicious grass, and visit different cow attractions (the roller cowster is particularly popular).There are a tota...原创 2019-07-16 21:41:12 · 279 阅读 · 0 评论 -
uasco MooTube (并查集)
题面:In his spare time, Farmer John has created a new video-sharing service, which he names MooTube. On MooTube, Farmer John’s cows can record, share, and discover many amusing videos. His cows already...原创 2019-07-17 20:24:27 · 227 阅读 · 0 评论 -
hdu 4757 Tree (可持久化trie)
链接题意:有一棵n个节点的树,每个节点有一个权值,询问u节点到v节点的链上异或x的最大值思路:dfs建树,对于u这个版本,它的上一个版本是它的父亲节点。然后就是查询了,这类树上询问一条链的问题,很多都是利用lca解决的。求出u,v两个点的lca,u到lca其实应该query(u,fa[lca])才行,v和lca同样。但是也可以query(u/v,lca),最后在把lca的位置单独拿...原创 2019-08-23 11:35:57 · 174 阅读 · 0 评论 -
2019 南京网络赛 G Greedy Sequence(主席树)
链接思路:从小枚举i,当i作为序列的第一个的时候,记i在原数组中的下标为idx,在[idx-k,idx+k](边界需要判断下)的范围找到比i小的数中最大的那个记为maxn,那么i的答案就是maxn的答案+1,如果没有maxn,那么答案就是1。查找maxn我是直接使用暴力主席树找小于等于i的个数k,然后查找区间第k-1的数,跑了近4000ms,卡过。参考代码:#include <b...原创 2019-09-01 20:51:25 · 136 阅读 · 0 评论 -
2019 南京网络赛 B The beautiful values of the palace(树状数组)
链接题意:有n*n的矩阵,值从右上开始一圈一圈往里面递增。(1,1)在左下,(n,n)在右上。给出m个宫殿,每个宫殿有一个美丽值,美丽值为矩阵所在位置上的值的数位和,如18=1 + 8 = 9给出q个询问,每个询问是一个矩阵,求在矩阵内的宫殿美丽值的和。思路:求在矩阵上的值找了个螺旋矩阵的模板。在知道了每个宫殿的美丽值之后,如何快速地解决问题。首先需要离线做,记录所有的询问。询问也...原创 2019-09-06 10:15:10 · 190 阅读 · 0 评论 -
2019 徐州网络赛 E XKC's basketball team(区间最大值)
链接题意:有n个人站成一排,每个人有能力值a[i],每个人会有一个angry值,是最右边的一个能力值加m大于等于a[i]的人与第i个人之间的人数。思路:对能力值和位置二维排序,能力值大优先,位置大优先。排序后,能力值递减,那么就找之前的那些人里面能力值大于等于a[i]+m的那些人里面的最大下标。用树状数组之类的维护一下【a[i]+m,最大值】区间内的最大位置即可,离散化一下更加方便。代...原创 2019-09-07 17:54:51 · 248 阅读 · 0 评论 -
51nod 1295 XOR key(可持久化trie)
链接题意:给出一个长度为N的正整数数组A,再给出Q个查询,每个查询包括3个数,L, R, X (L <= R)。求A[L] 至 A[R] 这R - L + 1个数中,与X 进行异或运算(Xor),得到的最大值是多少?思路:初学可持久化字典树,对它的理解还不是很深刻。主席树是可持久化的线段树,两者有相似之处。主席树中有版本这一概念,每一个版本都是新建一棵树,先复制上一个版本的内容,...原创 2019-08-21 09:43:12 · 155 阅读 · 0 评论 -
gym102001 problem H. Lexical Sign Sequence(线段树区间和)
链接题意:有n个数字,每个数字要么是1要么是-1,输入的时候0可以变为1或者-1,别的不能变。有k个条件需要满足。l r x:区间[l,r]的和大于等于x求一种满足所有条件的字典序最小的答案(-1 < 1)思路:一开始先把所有0改成-1。把所有的条件按照右端点从小到大排序,左端点也是从小到大,从左边开始遍历区间。对于一个区间,内部的数字从右往左遍历,把需要改成1的全部改了,这...原创 2019-08-20 18:52:19 · 284 阅读 · 0 评论 -
codeforces contest1187 problem D Subarray Sorting (线段树)
链接题意:给出两个长度为n的数组,可以把数组1中的一个区间内的数变为非降序(<=),询问数组1能否通过操作变成数组2思路:维护一下数组1的区间最小值并统计下每种数的下标(可以用队列之类),如果数组2中有一个数字x,如果x在数组1中的下标没有了,就说明两个数组的数字分布情况都不一样,肯定是不行了。有的话就取出最小的下标xpos,查询1-xpos区间的最小值,如果区间最小值要小于x,那...原创 2019-07-21 09:28:38 · 177 阅读 · 0 评论 -
Count on a tree SPOJ - COT 主席树+lca
题目链接样例解释:给出n和m表示有n个点和m个询问 下一行有n个值代表对应点的权值 然后是n-1行的u和v,表示u和v相连 最后是m个询问,每个询问有u,v,k,表示u到v这条链上第k大的权值。 如询问 2 5 1 就是图中画出来的这条链中第一个大的权值,那就是2了。解法: 这道题目跟主席树入门题目:求一段区间第k大很像,不同的是这道题目是求在树的一条链上的第k大...原创 2018-08-22 11:51:25 · 1409 阅读 · 0 评论 -
hdu 4348 To the moon 主席树
链接题意:给你下标从1开始到n的n个数字。有一个时间戳,一开始是0。 有四种操作: 1.C l r d 区间[l,r]中的每个数字都加上d,并且时间戳+1 2.Q l r 询问区间[l,r]的区间和 3.H l r t 询问在时间戳为t的时候[l,r]的区间和 4.B t 把时间戳变为t。这题可以用主席树来...原创 2018-08-27 21:17:52 · 224 阅读 · 0 评论 -
gym 101879G Running a penitentiary(线段树)
题目链接:http://codeforces.com/gym/101879/problem/G题意:有n个警察,第i个警察看管监狱的区间是【Li,Ri】。有两种操作:C i l r :把第i个警察的区间变为【l,r】。?l r :询问从第l个警察到第r个警察共同看管的区间长度是多少我的思路:以警察来建线段树,每次维护一个区间里最大的l和最小的r,这样很容易得到这个区间里的警察的公共区间的...原创 2018-09-24 13:39:33 · 519 阅读 · 0 评论 -
hdu6447树状数组
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6447题意:有一个左上角为(0,0)右下角为(1e9,1e9)的图,上面最多有1e5个点的值不为0,其余全为0。有一个人从左上角开始走,走的方向只有向右,向下,或者右下。只有当他向右下的方向走到一个非0点,他就会获得这个点的值。询问这个人走到右下角最大可以获得的值。思路:最容易想的是dp,对于一个点...原创 2018-09-25 19:58:25 · 237 阅读 · 2 评论 -
矩形面积并
例题:hdu1542题意:裸题从下面往上扫,扫到一个矩形的下底,那么对这个矩形底所在的x的区间都加上1。如果是上底的话就要减去1。这样的效果就是如果一个区间对应的x都是大于0的,则对应上面的面积就是要加的。如果是0的话,这个区间上面没有要加的面积。线段树维护的就是x轴有多少大于0的区间的总长度,然后这个长度*当前这根线和下一条线的差值的绝对值就是每扫一下ans要加的值。自己模拟一下就很清楚了...原创 2018-09-27 21:10:35 · 1803 阅读 · 0 评论 -
矩形面积交
例题:hdu1255题意:裸题,不过是要交两次以上的面积基本上都和面积并差不多#include&lt;bits/stdc++.h&gt;using namespace std;#define lson rt&lt;&lt;1#define rson rt&lt;&lt;1|1const int maxn=2005;struct node//和面积并一样,存放横向的线(把一个矩形原创 2018-09-28 21:15:29 · 137 阅读 · 0 评论 -
矩形周长并
例题:hdu1828题意:裸题思路:(自己理解还不是很深,不能强行解释。先贴个代码,里面有些注释,具体的日后再补)#include&amp;amp;lt;bits/stdc++.h&amp;amp;gt;using namespace std;#define lson rt&amp;amp;lt;&amp;amp;lt;1#define rson rt&amp;amp;lt;&amp;am原创 2018-09-29 13:40:03 · 657 阅读 · 0 评论 -
hdu5023 线段树
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5023题意:有最多30种颜色,一个长度为n的墙。一开始所有墙的颜色都是2。两种操作:P l r x :把区间[l,r]中所有的墙的颜色都改为xQ l r :询问[l,r]里面的颜色,把颜色升序输出思路:普通的线段树区间更新已经区间询问。#include&lt;bits/stdc++.h&...原创 2018-09-30 16:02:18 · 214 阅读 · 0 评论 -
LCT模板
测试链接:https://www.luogu.org/problemnew/show/P3690 #include<stdio.h>#include<algorithm>#define N 200005using namespace std;int rev[N],ss[N],ch[N][2],pre[N],st[N],t,n,val[N];bool ...原创 2018-12-13 18:23:44 · 106 阅读 · 0 评论 -
弹飞绵羊(LCT)
题意:有n个蹦蹦床,每个蹦蹦床有一个ki值,表示当跳到第i个蹦蹦床,会直接弹到第i+ki个蹦蹦床。当不存在第i+ki的时候(即i+ki>n),则被弹飞。两个操作:1 x:询问初始位置在x,到最后被弹飞,整个过程中,跳到过几个蹦蹦床。2 x y :把第x个蹦蹦床的kx值改为y 思路:一开始,给每个蹦蹦床连边,对于下标为i的蹦蹦床,如果i+ki<=n,则把i和i+k...原创 2018-12-14 12:42:55 · 255 阅读 · 0 评论 -
洞穴勘测(LCT)
题意:有n个点,有m个操作操作:Connect u v :把u和v连起来Destroy u v:把u和v的边删除Query u v:询问u和v是否联通询问时可以用真实树中的树根是否一致来判断参考代码:#include<stdio.h>#include<algorithm>#define N 200005using namespace st...原创 2018-12-14 16:11:38 · 178 阅读 · 0 评论 -
树分治(点)
基本思想:把树分割成几个子树,从而快速解决一些问题(如树上距离小于等于k的点对数)。关键是如何取分割树,不难想到,如果能够找到一个点,这个点下面的各个子树的大小都一样,肯定是个最优点,也叫重心。当然都一样是理想情况,在实际中只要保证重心下面的子树中最大的尺寸是最小的即可。模板题:poj 1741 树中距离小于等于k的对数#include<iostream>#include...原创 2018-12-11 15:07:17 · 163 阅读 · 0 评论 -
Codeforces Round #536 (Div. 2) B Lunar New Year and Food Ordering(线段树)
链接:http://codeforces.com/contest/1106/problem/B题意:一家饭店有n个菜,每个菜有两个属性:数量和价格。 有m个人按顺序去点菜,每个人有两个值t和d表示想要的菜的编号和数量。1.当一个人想要的菜还有时,会优先点。2.当想要的菜没有时,优先点最便宜且下标最小的菜3.当所有菜都不足时,这个人的答案就是0思路:用一个线段树维护一下所有...原创 2019-02-02 11:48:33 · 121 阅读 · 0 评论 -
codeforces problem 1217 E Sum Queries?(线段树)
链接题意:当集合中有某两个元素的十进制表示在某一位均不为0,就认为这是一个不平衡的multiset。现在给出一个数组,每次单点修改一个值,查询某个区间所有的数能组成的元素和最小的不平衡的multiset。思路:最小的multiset肯定是由两个数构成。由于十进制上的每一位都是相互独立的,那么就对每一位做一棵线段树,维护区间前两小即可,如果某个数字在某一位上是0,就记为inf,否则就记为...原创 2019-09-11 12:50:50 · 229 阅读 · 0 评论