随笔分类 -  ---数据结构---

摘要:题目链接:hdu 6162 Ch’s gift 题意: 给你一棵树,树上每个点有一个权值,现在有m个询问,每次询问给你一个s,t,L,R,问你从s到t的路径上,权值在[L,R]内的总和为多少。 题解: 我感觉我写复杂了,用树链剖分来维护路径,然后用主席树来建立权值线段树乱搞。 1 #include< 阅读全文
posted @ 2017-08-22 18:50 bin_gege 阅读(331) 评论(0) 推荐(0)
摘要:题目链接:hdu 6133 Army Formations 题意: 搞了一圈,最近就是让你输出每个点的答案,每个点的答案计算为将一该点为子树的全部的点的权值排序,求一下前缀和的前缀和。 题解: 由于是求前缀和的前缀和,考虑用树状数组,对于每插入一个数x,他的贡献为sum(x-1)+当前比他大的个数* 阅读全文
posted @ 2017-08-21 17:19 bin_gege 阅读(167) 评论(0) 推荐(0)
摘要:题目链接:hdu 6109 数据分割 题意: 给你一些不等和相等关系,然后分割,每次都按第一个不成立的等式分割。 题解: 由于相等关系具有传递性,不等关系不具有传递性。 所以相等关系可以由并查集来存储,不相等关系用set来存,目的是为了让查找log(n) 然后在两个集合进行合并的时候,要采用启发式合 阅读全文
posted @ 2017-08-14 15:20 bin_gege 阅读(212) 评论(0) 推荐(0)
摘要:题目链接:poj 2887 Big String 题意: 让你设计一个数据结构,支持将一个字符插在p位置,询问第p个字符。 题解: 块状链表搞搞就行。 1 #include<cstdio> 2 #include<queue> 3 #include<cmath> 4 #include<cstring> 阅读全文
posted @ 2017-08-13 20:43 bin_gege 阅读(145) 评论(0) 推荐(0)
摘要:题目链接:hdu 6119 小小粉丝度度熊 题意: 给你n个区间,和一个数m,m表示可补上不连续的位置累计和为m,现在问你最长的连续区间和为多少。 题解: 我可能写的有点复杂,大概就是将每个区间排序后离散化,将这些间隔看成一个点,然后双指针一下。 1 #include<bits/stdc++.h> 阅读全文
posted @ 2017-08-13 18:39 bin_gege 阅读(160) 评论(0) 推荐(0)
摘要:题目链接:BZOJ 2648 SJY摆棋子 题意: 在一个棋盘上,有N个黑色棋子。他每次要么放到棋盘上一个黑色棋子,要么放上一个白色棋子,如果是白色棋子,他会找出距离这个白色棋子最近的黑色棋子。此处的距离是 曼哈顿距离 即(|x1-x2|+|y1-y2|) 。现在给出N<=500000个初始棋子。和 阅读全文
posted @ 2017-08-07 21:36 bin_gege 阅读(127) 评论(0) 推荐(0)
摘要:题目链接:BZOJ 4154 [Ipsc2015]Generating Synergy 题意: 给定一棵以1为根的有根树,初始所有节点颜色为1,每次将距离节点a不超过l的a的子节点染成c,或询问点a的颜色。 题解: 将dfs序看为x,dep看为y,那么就是一个在二维平面上的操作了。 由于这个平面范围 阅读全文
posted @ 2017-08-07 18:30 bin_gege 阅读(114) 评论(0) 推荐(0)
摘要:题目链接:hdu 2966 In case of failure 题意: 给你n个点,让你输出每个点到最近点的欧式距离。 题解: KD-树裸题,板子抄的鸟神的。 1 #include<bits/stdc++.h> 2 #define F(i,a,b) for(int i=(a);i<=(b);++i 阅读全文
posted @ 2017-08-07 16:09 bin_gege 阅读(95) 评论(0) 推荐(0)
摘要:题目链接:hdu 6070 Dirt Ratio 题意: 给你n个数,让你找一段区间[l,r],使得[l,r]中不同的数的个数size/(r-l+1)最小。 题解: Claris官方题解: 1 #include<bits/stdc++.h> 2 #define F(i,a,b) for(int i= 阅读全文
posted @ 2017-08-05 20:30 bin_gege 阅读(188) 评论(0) 推荐(0)
摘要:题目链接: Codeforces Round #426 (Div. 2) D. The Bakery 题意: 给你n个数,划分为k段,每段的价值为这一段不同的数的个数,问如何划分,使得价值最大。 题解: 考虑dp[i][j]表示划分为前j个数划分为i段的最大价值,那么这就是一个n*n*k的dp, 考 阅读全文
posted @ 2017-08-02 21:09 bin_gege 阅读(147) 评论(0) 推荐(0)
摘要:题目链接:hdu 6059 Kanade's trio 题意: 给你n个数,让你找有多少个(i,j,k),使得i<j<k满足a[i]^a[j]<a[j]^a[k]。 题解: 首先考虑a[i]和a[k],将他们都转换成二进制,对于a[i]和a[k],我们用Bi[p]表示二进制下的a[i]的第p位。考虑 阅读全文
posted @ 2017-08-02 17:14 bin_gege 阅读(201) 评论(0) 推荐(0)
摘要:题目链接:Codeforces Round #427 (Div. 2) C. Star sky 题意: 在一个二维平面上有n个星星,每个星星有一个初始的亮度,每过去一秒,星星的亮度变化为(s+1)%(c+1). 现在有q个询问,问t秒后一个矩形区域的星星的总亮度为多少。 题解: 由于c不大,将每颗星 阅读全文
posted @ 2017-08-01 23:38 bin_gege 阅读(312) 评论(0) 推荐(0)
摘要:题目链接:hdu 6039 Gear Up 题意: 给出一些齿轮,有些齿轮是边相连,也就是拥有相同的线速度,有的齿轮是轴相连,也就是拥有相同的角速度,现在给某个齿轮一个速度,求这些齿轮中的最大速度,同时还有修改操作,可以更改某个齿轮的半径大小 题解: 官方题解: 1 #include<bits/st 阅读全文
posted @ 2017-07-26 21:32 bin_gege 阅读(296) 评论(0) 推荐(0)
摘要:题目链接:hdu 5820 Lights 题意: 给定一个网格图,上面有 N个灯 求任意两个灯之间,是否至少存在一条曼哈顿最短路径 使得路径上的每一个拐点都有一个灯。 题解: 我们可以对每个点将非法的区域找出来,然后看看这个区域内有没有点,然后就有如下的做法: 这里要从左往右和从右往左都扫一遍,这样 阅读全文
posted @ 2017-07-21 14:39 bin_gege 阅读(263) 评论(0) 推荐(0)
摘要:题目链接:hdu 5741 Helter Skelter 题意: 给定一个二进制的字符串,有 M次询问 问是否存在含有 a个 0 ,b个 1的区间 题解: 我们可以n2处理出每个区间,然后我们可以发现每个区间是一个矩形。 现在问题就转换成了有多少个点在这些矩形内。 然后就可以离散化后扫描线一下。 1 阅读全文
posted @ 2017-07-20 00:06 bin_gege 阅读(170) 评论(0) 推荐(0)
摘要:题目链接:Codeforces Round #424 (Div. 2) E. Cards Sorting 题意: 将n个数放进一个队列,每次检查队首,看看是不是队列中最小的数,如果是就扔掉,如果不是就放到队尾。 这样直到队列为空,为需要操作多少次。 题解: 考虑用两个指针模拟,最开始now指针指向第 阅读全文
posted @ 2017-07-15 14:24 bin_gege 阅读(185) 评论(0) 推荐(0)
摘要:题目链接:bzoj 4026 dC Loves Number Theory 题意: 给你n个数,有q个询问,每次问你一个区间乘积的欧拉函数。 强制在线。 题解: 由欧拉函数性质: euler(x)=x(1-1/p1)(1-1/p2)(1-1/p3)(1-1/p4)…(1-1/pn),其中p1,p2… 阅读全文
posted @ 2017-07-13 15:02 bin_gege 阅读(133) 评论(0) 推荐(0)
摘要:题目链接:"盛大游戏杯" M 风力观测 题意: 给你n个数,现在有m个操作。 1 L R V 给[L,R]区间全部加V. 2 X 询问X这个点 历史的绝对值最大是多少。 题解: 对于每个询问,其实我们只需要记录下在这个过程中最大的偏移量和最小的偏移量就行了。 所以直接一个线段树搞一搞就行了。 1 # 阅读全文
posted @ 2017-07-10 22:31 bin_gege 阅读(166) 评论(0) 推荐(0)
摘要:题目链接:codechef Xor Queries 题意: 题解: 一棵可持久化字典树就行了。 1 #include<bits/stdc++.h> 2 #define F(i,a,b) for(int i=(a);i<=(b);++i) 3 using namespace std; 4 5 cons 阅读全文
posted @ 2017-07-10 18:18 bin_gege 阅读(186) 评论(0) 推荐(0)
摘要:题目链接:hdu 4348 To the moon 题意: 给你n个数,有m个操作。 1.给区间[l,r]的所有数+d,并且时间戳+1 2.询问当前时间戳的区间和。 3.询问过去时间戳t的区间和。 4.退回到时间戳t。 题解: 直接上主席树。 不过区间操作的时候push_down空间似乎不是那么够用 阅读全文
posted @ 2017-07-07 20:51 bin_gege 阅读(172) 评论(0) 推荐(0)