![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构
文章平均质量分 79
Tri_integral
这个作者很懒,什么都没留下…
展开
-
HDU 4630 No Pain No Game 解题报告
题目 2013 暑假多校训练 3 题意: 一个1到n的排列,每次查询在[l,r]这个区间中,任选两个数的最大公约数的最大值。 题解: 对1到n的每个i,找到i,2×i,3×i……的位置,排序后可以得到一串位置,只要查询的区间包含其中两个,答案就至少是i。也就是查询区间包含任意相邻的两个点形成的区间即可。 求出上述的所有位置区间,以右端点为第一关键字和查询区间一起排序(若右端点相同位原创 2013-07-30 19:40:58 · 1198 阅读 · 0 评论 -
HDU 4777 Rabbit Kingdom 解题报告
题目 题意: 有n个数字,m个查询,每次询问[l,r]这些数字中,和其他数都互质的数有多少个。 题解: 从左到右遍历,对每个数因子分解,如果它含有的因子在之前也有数含有,那么便可知那个数和它不互质,所以可以求出每个数i左边第一个和它不互质的数的位置,记为lefi,右边同理,记为rigi。 然后将查询按l排序,从左往右遍历原数组,遍历到j时,若存在i使得j-1=lefi,则可知从j到(ri原创 2013-11-18 19:33:41 · 1405 阅读 · 0 评论 -
UVA 12538 Version Controlled IDE 解题报告
题意:给三种操作 1.在p位置插入一个字符串. 2.从p位置开始删除长度为c的字符串 3.输出第v个历史版本中从p位置开始的长度为c的字符串 解法:可以用平衡树做,但是不会.后来又听说可一用一个叫roap的神奇的STL,学习了一下,用法基本和string一样.roap的内部是用平衡树实现的,历史版本和当前版本可以共享一些内存,插入和删除整段字符串效率很高.是可持久化的数据结构. //T原创 2013-08-06 00:23:30 · 2188 阅读 · 0 评论 -
UVALive 5789 Army Buddies 解题报告
题目 题意: s个士兵排成一列,每次有L到R这些原本健在的士兵死亡,求L-1到1第一个还活着的士兵的编号,以及R+1到s第一个活着的士兵的编号,不存在则输出*。 题解: 方法一: 用并查集,将两种查询分开,如第一个并查集,L到R合并在一起,根为L,表示L+1到R这些人都死了,且R+1和L还活着,那么L到1第一个还活着的士兵自然是L。由于每个士兵只修改一次,所以是O(N)的。 方法二:原创 2013-09-01 20:25:50 · 1207 阅读 · 0 评论 -
ZOJ 3699 Dakar Rally 解题报告
题意:给油箱容量,n个有顺序的点,给出从当前点到下一个点的距离,单位耗油量,汽油的单价。每个站都能加不超过油箱容量的油。求到终点的最小花费。 解法:本着贪心的原则,应该尽量在便宜的地方多加油。 所以模拟汽车行驶的过程中,在比当前位置汽油便宜的站能加要尽量加满(如果之后发现不是最优的就减去),并记录每一站剩余的可用油量,和到当前站油箱中剩余的汽油(因为要保证不超过油箱容量)。而花费是统计从当前站原创 2013-05-20 22:27:38 · 1149 阅读 · 0 评论 -
POJ 4047 Garden 解题报告
题目 题意: 有n个连续的一维上的点,每个点有一个美丽值。 每次有三种操作: 1、将x点的美丽值改为y。 2、将x、y交换 3、查询[x y]间,连续k个点的美丽值总和的最大值。 解法: 线段树,叶子i表示[i i+k]美丽值总和,然后每个点维护一个区间最大值。 修改时区间修改,将包含x的所有叶子都修改(用lazy标记),查询时输出区间最大值。 Time:3原创 2013-05-19 13:10:38 · 806 阅读 · 0 评论 -
HDU 4614 Vases and Flowers 解题报告
题目 题意:一开始有标号为0~N-1的N个空花瓶,进行两种操作 操作1:A F,从标号为A的花瓶开始往后面放F朵花,如果当前花瓶有花了,就继续往后放,如果有花没有地方放了就丢掉。输出第一朵花和最后一朵花放的花瓶标号 操作2:A B,将花瓶A~B全部清空,并输出多少个花瓶被清空。 解法: 利用线段树的区间更新区间查询,线段树存储区间内有多少不为空的花瓶 对于操作1,先在[A,N-1]二分原创 2013-07-25 19:45:33 · 1154 阅读 · 0 评论 -
SPOJ AMR12J Escape from the Mines 解题报告
题目 题意: 有很多个房间,之间没有交叉和重叠。求每个房间外面是空地还是别的房间。 题解: 扫描线,将横坐标离散,线段树表示当前横坐标范围内哪些纵坐标是哪些房间。插入新房间时查一下这一段内是哪个房间或空地(因为没有交叉所以查一个点就行),到房间的右边界就把原来查询得到的房间编号覆盖回去。 //Time:1510ms //Memory:21504KB //Length:2303B原创 2013-08-04 14:19:03 · 1001 阅读 · 0 评论 -
POJ 4052 Hrinity 解题报告
题目 题意: 有一些压缩模式串和压缩主串,展开后问有多少个模式串在主串里,注意若两个模式串都在主串内,且一个包含另一个,则只算一次。 解法: 展开后,用模式串建AC自动机,然后用主串跑一次看有哪些包含在内,然后将模式串连在一次,再跑一次看有哪些包含,然后减去就可以啦。 TIme:469ms Memory:47836KB Length:3327B #include #includ原创 2013-05-19 15:52:45 · 1477 阅读 · 1 评论 -
poj-openjudge 1042:Moles 解题报告
题目 2013北大校赛 题意: 给出一棵带权树,树根为1,mole当前位于1,有三种操作 1 u:mole移到点u,并输出移动的距离 2:输出mole所在点到其子孙的最大距离 3 u v w:将一棵树边(u,v)的权值改为w 思路: 一开始想的是树链剖分,但是不会处理2,就算了 只好用挫一点的办法了,所以代码巨长...... 对于2,可以先求得树的dfs序列和每个点到根1的距离原创 2013-07-08 15:00:56 · 890 阅读 · 0 评论 -
HDU 4605 Magic Ball Game 解题报告
题目: 一棵n个节点的二叉树,每个非叶子节点都有左右儿子,每个节点都有一个权值w[u],从根丢一个值X的球,沿着树链往下走: 如果w[u]=X或者到了叶子,球就停下来 如果w[u] 如果w[u]>X,球有1/2的概率往左边走,有1/2的概率往右边走 询问(v,x),当X=x时,有多少概率经过点v。 解法: 问题抽象成,求树根到点v的链上,有多少个点权值比x大,且往左孩子走(×1/2)原创 2013-07-24 13:40:29 · 1530 阅读 · 1 评论 -
HDU 4775 Infinite Go 解题报告
题目 题意: 在一个有上、左边界,无右、下边界的棋盘上下棋,如果一片同颜色的棋子周围(只考虑横纵的四个格子)都是边界或者敌方的棋子,则它们会被消去。A、B两人轮流下棋,如果一方下了一个棋子使得有棋子要被消去时,先消敌方的,消完敌方后再看是否要消去己方。已知下棋的位置,求最后剩的棋子个数。 题解: 用map存下每个棋子的位置,就可以预处理棋子之间的邻接关系。然后依次下棋,遇到同色的棋子则用并原创 2013-11-18 20:25:28 · 1579 阅读 · 0 评论