数据结构
inklutcuah
这个作者很懒,什么都没留下…
展开
-
【jzoj5405】【NOIP2017提高A组模拟10.10】【Permutation】
description你有一个长度为n 的排列P 与一个正整数K你可以进行如下操作若干次使得排列的字典序尽量小对于两个满足|i-j|>=K 且|Pi-Pj| = 1 的下标i 与j,交换Pi 与Pjsolution可以令a[p[i]]=i,发现这样相当于交换了i和p[i],对相邻两个a交换,满足|a[i]-a[i+1]|>=K。可以发现a的最小字典序一定对应p的最小字典序。发现对于i然而暴力建边会t原创 2017-10-15 15:05:26 · 672 阅读 · 1 评论 -
【jzoj5072】【GDOI2017第三轮模拟day1】【单旋】【数据结构】
题目大意H国是一个热爱写代码的国家,那里的人们很小去学校学习写各种各样的数据结构。伸展树(splay)是一种数据结构,因为代码好写,功能多,效率高,掌握这种数据结构成为了H国的必修技能。有一天,邪恶的“卡”带着他的邪恶的“常数”来企图毁灭H国。“卡”给H国的人洗脑说,splay如果写成单旋的,将会更快。“卡”称“单旋splay”为“spaly”。虽说他说的很没道理,但还是有H国的人相信了,小H就是其原创 2017-04-19 16:39:55 · 533 阅读 · 0 评论 -
【jzoj5043】【保持平衡】【数据结构】
题目大意博爱路上种起了一棵棵的大树,但是有一些地方的树超过了负荷,有一些地方的树的数量又不够。我们不妨把博爱路看做一条数轴,数轴有n个点,从1到n编号,第i个位置原来现在有ai棵树,这个位置的需求是bi棵树。ai,bi都是0到10的整数。由于你需要是这个位置的树的数量保持平衡,所以你需要移除或者搬一些树过来。我们怎么使树的数量平衡呢?首先,你可以从某个位置i移动一棵树到位置j,这时,你需要的运费是|原创 2017-04-06 15:25:21 · 396 阅读 · 0 评论 -
【jzoj5048】【IQ测试】【数据结构】
题目大意PTY进行IQ测试,测试的项目是判断一个序列是否是另外一个序列删除若干个数字之后得到的,PTY 深知自己的IQ 低于sqrt(-1),所以他请来了智商超高的你来替他解决问题。解题思路此题有线性离线做法,用指针维护。考虑线段树上二分下一个点即可n log n在线。code#include<set>#include<cmath>#include<cstdio>#include<cstrin原创 2017-04-11 15:42:46 · 596 阅读 · 0 评论 -
【jzoj5049】【腐女的生日】【扫描线】【数据结构】
题目大意腐女要过生日了,pty 想给腐女送礼物,但是腐女所在的教室离pty 的教室太远了,于是pty就拜托会动归和A星的djy帮忙送礼物。djy在学校建立了一个平面直角坐标系,他站在了(0,0)点,腐女在(x0,y0)点,djy每次只能往上下左右四个方向移动一步,中间有n栋矩形教学楼,每个教学楼给出两个对角的坐标,并且保证每栋教学楼的周围区域(如图所示)不会有别的教学楼,即djy可以绕一个教学楼走不原创 2017-04-11 14:40:29 · 688 阅读 · 0 评论 -
【jzoj3740】【TJOI2014】【电源插排】【线段树】
题目大意解题思路建一棵线段树,动态开点,维护size,最大空区间,左边右边起最大空区间,及其起始点。同时开hash维护所有人站在哪里。code#include<set>#include<cmath>#include<cstdio>#include<cstring>#include<algorithm>#define LF double#define LL long long#defin原创 2017-03-25 12:17:17 · 490 阅读 · 0 评论 -
【51nod1297】【管理二叉树】【点分治】
题目大意一个初始为空的二叉搜索树T,以及1到N的一个排列P: {a1, a2, …, aN}。我们向这个二叉搜索树T添加这些数,从a1开始, 接下来是 a2, …, 以aN结束。在每一个添加操作后,输出T上每对节点之间的距离之和。解题思路建树暴力会超时,观察可知一个点只会挂在比它小的点中最大的点的右边或比它大的点中最小的点的左边,并且有且只有一个位置是空的,我们可以用set来求这个。接下来就是建重心原创 2017-03-23 16:31:04 · 504 阅读 · 0 评论 -
【jzoj4920】【降雷皇】【动态规划】【二分答案】【数据结构】
题目大意求一个序列的最长上升子序列及方案数。解题思路首先维护一个数组,t[i]表示长度为i的最长上升子序列末尾最小是多少,这样就可以求出第一个答案。每个长度再用权值线段树维护每个末尾的方案数,转移方案数时求一下比它小的末尾方案数之和。code#include<cmath>#include<cstdio>#include<algorithm>#define LL long long#defin原创 2016-12-10 15:15:35 · 426 阅读 · 0 评论 -
【jzoj2413】【NOI2005】【维护数列】【splay】
题目大意 请写一个程序,要求维护一个数列,支持以下6种操作:(请注意,格式栏中的下划线‘ _ ’表示实际输入文件中的空格)1. 插入 INSERT_posi_tot_c1_c2_…_ctot 在当前数列的第posi个数字后插入tot个数字:c1, c2, …, ctot;若在数列首插入,则posi为02. 删除 DELETE_posi_tot 从当前数列的第posi个数字开始连续删除tot个数字3.原创 2017-03-10 18:39:15 · 336 阅读 · 0 评论 -
【jzoj3599】【CQOI2014】【排序机械臂】【splay】
题目大意解题思路先按val为第一关键字,编号为第二关键字,从小到大排序,离散化。然后在末尾加入一个无穷大,建一棵splay,维护size和min的编号,支持求后继和区间翻转。时刻保持上一个翻转的点为根,将将要翻转的挂在根下面,把将要翻转的的后继挂在根下面,然后对其左子树区间翻转。由于将要翻转的一定在其左子树的最右边,编号就是左子树的size加根及其左子树的点数。code#include<cmath>原创 2017-03-03 22:31:24 · 532 阅读 · 0 评论 -
【jzoj3893】【画矩形】【时间分治】【数据结构】
题目大意解题思路考虑前面全是插入,后面全是询问的做法。考虑扫描线把插入拆成两个操作,按横坐标排序,用数据结构维护。考虑原问题,考虑分治,把前一半插入对后一半的贡献先求出来消除了影响,再递归求解。code#include<cmath>#include<cstdio>#include<cstring>#include<algorithm>#define LF double#define LL原创 2017-01-24 17:01:04 · 334 阅读 · 0 评论 -
【51nod1175】【区间中的第k大的数】【可持久化线段树】
题目大意一个长度为N的整数序列,编号0 - N - 1。进行Q次查询,查询编号i至j的所有数中,第K大的数是多少。例如: 1 7 6 3 1。i = 1, j = 3,k = 2,对应的数为7 6 3,第2大的数为6。解题思路从左到右加点建可持久化线段树,维护前缀权值线段树,询问时利用右减左得出当前区间的权值线段树,按size大小判断往哪个方向走,即可得出答案。code#include<cmath>原创 2017-02-28 22:41:59 · 667 阅读 · 0 评论 -
【jzoj2902】【集训队互测 2012】【Middle】【可持久化线段树】
题目大意一个长度为 n 的序列 a ,设其排过序之后为 b ,其中位数定义为 b[n/2] ,其中 a,b 从 0 开始标号 , 除法取下整。给你一个长度为 n 的序列 s 。回答 Q 个这样的询问 : s 的左端点在 [a,b] 之间 , 右端点在 [c,d] 之间的子序列中 ,最大的中位数。其中a<b<c<d a<b<c<d。位置也从 0 开始标号。我会使用一些方式强制你在线。解题思路考虑求一个原创 2017-02-28 15:36:52 · 315 阅读 · 0 评论 -
【jzoj3887】【字符串查询 】【二分查找】【可持久化trie】
题目大意给定n个字符串和q个询问每次询问在这n个字符串中,有多少个字符串同时满足1. 字符串a是它的前缀2. 字符串b是它的后缀解题思路先对字符串排序,倒着建可持久化trie,二分查找前缀,后缀在线查询。code#include<cmath>#include<cstdio>#include<cstring>#include<algorithm>#define LF double#defin原创 2017-01-19 15:25:10 · 306 阅读 · 0 评论 -
【jzoj3886】【道路维护】【并查集】
题目大意最近徆多人投诉说C国的道路破损程度太大,以至亍无法通行C国的政府徆重视这件事,但是最近财政有点紧,丌可能将所有的道路都进行维护,所以他们决定按照下述方案进行维护将C国抽象成一个无向图,定义两个城市之间的某条路径的破损程度为该条路径上所有边破损程度的最大值,定义两个城市之间的破损程度为两个城市之间所有路径破损程度的最小值然后C国政府向你提问多次,有多少个城市对的破损程度不超过L,他们将依照你的原创 2017-01-19 11:37:58 · 425 阅读 · 0 评论 -
【jzoj3875】【星球联盟】【树】【并查集】
题目大意在遥远的S星系中一共有N个星球,编号为1…N。其中的一些星球决定组成联盟,以方便相互间的交流。但是,组成联盟的首要条件就是交通条件。初始时,在这N个星球间有M条太空隧道。每条太空隧道连接两个星球,使得它们能够相互到达。若两个星球属于同一个联盟,则必须存在一条环形线路经过这两个星球,即两个星球间存在两条没有公共隧道的路径。为了壮大联盟的队伍,这些星球将建设P条新的太空隧道。这P条新隧道将按顺序原创 2017-01-18 21:10:19 · 501 阅读 · 0 评论 -
【jzoj5060】【GDOI2017第二轮模拟day1】【公路建设】【数据结构】
题目大意在Byteland一共有n 个城市,编号依次为1 到n,它们之间计划修建m条双向道路,其中修建第i 条道路的费用为ci。Byteasar作为Byteland 公路建设项目的总工程师,他决定选定一个区间[l, r],仅使用编号在该区间内的道路。他希望选择一些道路去修建,使得连通块的个数尽量少,同时,他不喜欢修建多余的道路,因此每个连通块都可以看成一棵树的结构。为了选出最佳的区间,Byteasa原创 2017-04-16 08:14:57 · 878 阅读 · 0 评论 -
【bzoj2002】【Hnoi2010】【Bounce 弹飞绵羊】【lct】
题目大意某天,Lostmonkey发明了一种超级弹力装置,为了在他的绵羊朋友面前显摆,他邀请小绵羊一起玩个游戏。游戏一开始,Lostmonkey在地上沿着一条直线摆上n个装置,每个装置设定初始弹力系数ki,当绵羊达到第i个装置时,它会往后弹ki步,达到第i+ki个装置,若不存在第i+ki个装置,则绵羊被弹飞。绵羊想知道当它从第i个装置起步时,被弹几次后会被弹飞。为了使得游戏更有趣,Lostmonke原创 2017-05-12 21:25:40 · 277 阅读 · 0 评论 -
【jzoj3754】【NOI2014】【魔法森林】【lct】
题目大意为了得到书法大家的真传,小 E 同学下定决心去拜访住在魔法森林中的隐士。魔法森林可以被看成一个包含 n 个节点 m 条边的无向图,节点标号为1,2,3, … , n,边标号为 1,2,3, … , m。初始时小 E 同学在 1 号节点,隐士则住在 n 号节点。小 E 需要通过这一片魔法森林,才能够拜访到隐士。魔法森林中居住了一些妖怪。每当有人经过一条边的时候,这条边上的妖怪就会对其发起攻击。原创 2017-05-13 20:31:00 · 356 阅读 · 0 评论 -
【jzoj5368】【NOIP2017提高A组模拟9.16】【为逝去的公主献上的七重樱】【单调队列】
descriptionsolution可以发现答案可能出现在两个部分,没有加入过的最小的数,出去了的最小数。对于前一个部分可以用桶记录,对于一部分我们构出一个队列,如果一个数在另一个数加入前加入且比那个数大,那它一定不可能出现在答案中,用单调队列维护即可。code#include<cstdio>#include<cmath>#include<cstring>#include<algorithm原创 2017-09-17 07:35:37 · 588 阅读 · 0 评论 -
【jzoj5334】【NOIP2017提高A组模拟8.24】【空】【扫描线】【set】
descriptionsolution考虑用扫描线,可以发现有相交和内含两种情况,相交就是l+r的差,内含就是r-l的差,可以分别两次用set维护。code#include<set>#include<cstdio>#include<cmath>#include<cstring>#include<algorithm>#define LL long long#define fo(i,j,k)原创 2017-08-24 12:00:17 · 361 阅读 · 0 评论 -
【jzoj5333】【NOIP2017提高A组模拟8.23】【大新闻】【可持久化线段树】
descriptionsolution可以发现把序列倒过来就是在队末加或删数维护前缀权值线段树即可, 这不就是主席树,直接做就可以了。code#include<set>#include<cstdio>#include<cmath>#include<cstring>#include<algorithm>#define LL long long#define fo(i,j,k) for(in原创 2017-08-23 14:15:46 · 284 阅读 · 0 评论 -
【jzoj5329】【NOIP2017提高A组模拟8.22】【时间机器】【数据结构】【扫描线】
descriptionsolution把机器和电阻按l排序,l相等时电阻排前面,扫描线从左往右扫,遇到电阻把右端点放入set,遇到机器lowerbound找到最小的r比机器的r大匹配即可。code#include<set>#include<cstdio>#include<cmath>#include<cstring>#include<algorithm>#define LL long lo原创 2017-08-22 12:28:56 · 330 阅读 · 0 评论 -
【jzoj5290】【NOIP2017提高组A组模拟8.17】【行程的交集】
Description豪哥生活在一个n个点的树形城市里面,每一天都要走来走去。虽然走的是比较的多,但是豪哥在这个城市里面的朋友并不是很多。当某一天,猴哥给他展现了一下大佬风范之后,豪哥决定要获得一些交往机会来提升交往能力。豪哥现在已经物色上了一条友,打算和它(豪哥并不让吃瓜群众知道性别)交往。豪哥现在spy了一下这个人的所有行程起点和终点,豪哥打算从终点开始走到起点与其相遇。但是豪哥是想找话题的,他原创 2017-08-17 22:10:50 · 369 阅读 · 0 评论 -
【jzoj5248】【NOIP2017提高A组模拟8.10】【花花的聚会】【动态规划】【可持久化线段树】
题目大意解题思路设f[i]表示i到根最小花费,用可持久化线段树维护到根的路径上的f,区间求最小值即可。code#include<cstdio>#include<cmath>#include<cstring>#include<algorithm>#define LF double#define LL long long#define ULL unsigned int#define fo(原创 2017-08-10 16:15:52 · 298 阅读 · 0 评论 -
【jzoj5289】【NOIP2017提高组A组模拟8.17】【偷笑】【数据结构】
Descriptionberber走进机房,边敲门边喊:“我是哔哔”CRAZY转过头:“我警告你,哔哔刚刚来过!”“呵呵呵呵……”这时,哔哔站了起来,环顾四周:“你们笑什么?……”巧了,发出笑声的人都排成了一排,每个人刚开始发出的笑声值为a[i]的笑声。但是有些笑声哔哔是听不出来的,他只听得出笑声值只包含2和3的数字,比如说什么2333。但是同学们还是很会秀操作的。对于操作add l r x表示l原创 2017-08-17 16:10:42 · 705 阅读 · 0 评论 -
【jzoj5232】【NOIP2017模拟A组模拟8.5】【带权排序】【线段树】
题目大意解题思路考虑维护f[i]表示填i时当前数期望前面有多少个数比自己小,发现添加一个数对f增加一个等差数列和一段定值,计算贡献时区间求和,可以用线段树维护。code#include<cstdio>#include<cmath>#include<cstring>#include<algorithm>#define LF double#define LL long long#define原创 2017-08-09 22:08:49 · 371 阅读 · 0 评论 -
【jzoj5221】【GDOI2018模拟7.10】【A】【线段树合并】
题目大意解题思路从下往上建权值线段树,用子树的线段树合并出当前的线段树,维护最大连续区间和size即可。code#include<cstdio>#include<cmath>#include<cstring>#include<algorithm>#define LF double#define LL long long#define ULL unsigned int#define fo原创 2017-07-10 11:47:36 · 271 阅读 · 0 评论 -
【jzoj5222】【GDOI2018模拟7.12】【A】【数据结构】
题目大意解题思路题目有问题,一个人可以控制iq相同的。使用数据结构计算出一个数和后面数构成的逆序对数,计算出每个点被操作的最早时间,从高到低加入,计算出每个点贡献变成0的时间,统计答案即可。code#include<cstdio>#include<cmath>#include<cstring>#include<algorithm>#define LF double#define LL lo原创 2017-07-14 11:55:12 · 380 阅读 · 0 评论 -
【codeforces 813E】【Army Creation】【数据结构】
题目大意给出一列序列,不同的数代表不同的颜色。每次询问一段区间,求一个子集(每个数可选可不选)每种颜色的数不超过K,最大的集合大小是多少。解题思路先求出b[i],代表每个数往后的连续区间第一个同种颜色超过K个的位置是哪里。询问一个区间时所包含的b,b[i]在区间里面的数一定不可取。对于这个问题可以用主席树解决。code#include<cstdio>#include<cmath>#include原创 2017-06-13 16:13:29 · 712 阅读 · 0 评论 -
【jzoj3625】【SDOI2014】【旅行(travel)】 【虚树】【lct】
题目大意解题思路考虑离线询问,把所有可能的点用虚树建出来,用lct维护虚树即可。code#include<cstdio>#include<cmath>#include<cstring>#include<algorithm>#define LF double#define LL long long#define ULL unsigned int#define fo(i,j,k) for(原创 2017-07-11 16:24:52 · 397 阅读 · 0 评论 -
【jzoj5073】【GDOI2017第三轮模拟day1】【影魔】【数据结构】
题目大意影魔,奈文摩尔,据说有着一个诗人的灵魂。事实上,他吞噬的诗人灵魂早已成千上万。千百年来,他收集了各式各样的灵魂,包括诗人、牧师、帝王、乞丐、奴隶、罪人,当然,还有英雄。每一个灵魂,都有着自己的战斗力,而影魔,靠这些战斗力提升自己的攻击。奈文摩尔有n个灵魂,他们在影魔宽广的体内可以排成一排,从左至右标号1到n。第i个灵魂的战斗力为k[i],灵魂们以点对的形式为影魔提供攻击力,对于灵魂对i,j(原创 2017-05-25 16:12:18 · 339 阅读 · 0 评论 -
【动态树之link_cut_tree学习小记】
定义lct就是使用很多棵splay来维护树形结构及其链上信息的数据结构。操作access就是将一个点和根节点的路径用一棵splay联系在一起,没有其他多余的节点。我们的每一棵splay都是维护一条往上的树链,其中深度较小的在splay的左边。每一个splay最左端点都维护一个指针,指向原树中的父亲,这样access就是一些splay的合并。makeroot就是将一个点x变成树的根节点,先access原创 2017-05-13 20:46:18 · 261 阅读 · 0 评论 -
【spoj】【COT - Count on a tree】【可持久化线段树】
题目大意给出一棵树,询问两点路径上第k大点权是什么。解题思路自上到下建可持久化线段树,维护当前点到根的信息,使用权值线段树记录size,查询的时候两端的值减去lca和lca的父亲的值即当前路径的权值线段树,即可求解。code#include<cmath>#include<cstdio>#include<cstring>#include<algorithm>#define LF double原创 2017-02-16 22:33:29 · 429 阅读 · 0 评论 -
【jzoj3854】【CF173E】【Camping Groups】【分组】【数据结构】
题目大意Bsny所在的精灵社区有n个居民,每个居民有一定的地位和年龄,ri表示第i个人的地位,ai表示第i个人的年龄。最近社区里要举行活动,要求几个人分成一个小组,小组中必须要有一个队长,要成为队长有这样的条件:1、队长在小组中的地位应该是最高的(可以并列第一);2、小组中其他成员的年龄和队长的年龄差距不能超过K。有些人想和自己亲密的人组在同一个小组,同时希望所在的小组人越多越好。比如x和y想在同一原创 2017-01-16 20:01:36 · 459 阅读 · 0 评论 -
【jzoj4815】【ksum】【set】
题目大意解题思路我们发现可以记录从第i位开始的数组的后缀,因为数为正数所以有单调性,所以我们可以逐个数从后缀中删除,这样可以考虑所有情况,用set维护就好了。code#include<set>#include<cmath>#include<cstdio>#include<cstring>#include<algorithm>#define LF double#define LL long原创 2016-12-25 10:42:19 · 414 阅读 · 0 评论 -
【jzoj4586】【Ned的难题】【单调栈】
题目大意给出一个序列,求所有连续子序列gdc和。题解可以发现,所有质因子对答案的贡献都是独立的。考虑每个数所含当前质因子的个数,可以发现一段区间的gcd等于取min。可以用单调栈维护,保证单调不下降,栈里的每个位所代表的区间到当前区间可以形成区间,它们都可以贡献栈里所代表的区间的高度个当前质因子的答案,说不太清楚看一下code。这样一个一个搞就可以了。观察一下本题的特殊性,扩大区间一定不会让gcd变原创 2016-07-12 11:38:02 · 392 阅读 · 0 评论 -
【jzoj4848】【永恒的契约】【单调栈】
题目大意有一个环,由n块石头组成。第i块石头有一个高度ai,两块不同的石头i,j能够互相看到,则它们在环上的两条路径中有至少一条路径上除了两个端点(即i,j)路径上石头高度都不大于min(ai,aj)。求有多少对石头能够互相看到。解题思路假如在序列上,合法的i,j(icode#include<set>#include<cmath>#include<cstdio>#include<cstring原创 2016-11-03 15:13:52 · 425 阅读 · 0 评论 -
【jzoj4820】【最大化】【单调栈】
题目大意解题思路枚举左右边界,压成一维做前缀和,维护一个单调递减的栈,从后往前做,对答案有贡献的是小于它的最前点,如果比上一个大则继续退栈,比上一个小则不可能对答案贡献,因为和它匹配的点序号更大,区间长度更小。code#include<set>#include<cmath>#include<cstdio>#include<cstring>#include<algorithm>#define原创 2016-11-03 16:10:32 · 257 阅读 · 0 评论 -
【bzoj1588】【HNOI2002】【营业额统计】【splay】
题目大意给出一个序列,求每个数与前面的数的最小差的和。题解用平衡树保存前缀,把每个数与前驱和后继的最小差加进答案即可。ps#原创 2016-06-30 08:26:53 · 391 阅读 · 0 评论