数据结构
cadongllas
这个作者很懒,什么都没留下…
展开
-
#342Div2-625D Babaei and Birthday Cake线段树优化DP
首先要明白一个蛋糕在另一个之上当且仅当序号和体积都比原来的大 然后一维显然可以用sort解决,另一维暴力是n^2显然过不了,考虑优化 不妨按体积排序,然后记录对应的在原序列中的序号,然后扫一遍,每次处理完当前之后,便把这个体积插入线段树中,对应的节点就是在原序列中对应的节点,然后每次用logn做大查询,就是简单的线段树优化DP的问题。 当然,比如树状数组等同样支持区间Max的也能做到#inc原创 2016-03-17 16:48:38 · 323 阅读 · 0 评论 -
HDU5649 DZY Loves Sorting 二分+线段树
上周六BC的最后一道题 感觉还是挺经典的做法的,首先因为是n的全排列,所以可以直接二分答案然后用线段树判断,好吧其实bc的题解说的已经很清楚了 这是一道良心的基础数据结构题。 我们二分a[k]a[k]的值,假设当前是midmid,然后把大于midmid的数字标为11,不大于midmid的数字标为00。然后对所有操作做完以后检查一下a[k]a[k]位置上是00还是11。 因为原创 2016-03-22 22:29:17 · 622 阅读 · 0 评论 -
HDU5289 Assignment RMQ / 单调队列
要求最大值最小值之差小于k的子序列的个数 本题有两种方法求解: 方法一:单调队列 暴力枚举区间右端点,然后利用左端点不减的性质解决题目。 具体就是使用两个单调队列分别维护最大最小值 上次用这个数据结构还是高一,当时还十分业余,这次用deque好好的实现了一下。 首先注意单调队列这种数据结构,利用单调性有着十分优秀的性质,合理利用可有大作用。 以本题的最大值优先队列维护区间最大值为例原创 2016-03-23 23:20:24 · 877 阅读 · 1 评论 -
ACM 数据结构入门
给队友写的,顺便自己总结一下 本文总结了基础的acm所能用到的数据结构 省略了栈,队列,并查集等基础知识 RMQ 优点:编写复杂度低,不容易错。倍增的思想非常好 缺点:不支持修改操作,用处小 初级题目见课件 进阶题目推荐 HDU5289 树状数组 一个看起来很简单但是实际上用处十分大的数据结构,编写难度小于线段树,但是很多情况可以替代线段树,性价比十分高 更好的原创 2016-03-24 22:07:19 · 964 阅读 · 1 评论 -
hdu 1754 树状数组
题意:单点修改,区间查询最大值 用线段树是可以轻松解决的,这题我是用树状数组写的 对于每个lowbit的区间维护一个最大值,然后当单点加的时候,然后到后面也都一起加 #include #include #include #include #define rep(i, j, k) for(int i = j; i <= k; i++) #define maxn 200009原创 2016-09-03 14:59:20 · 216 阅读 · 0 评论 -
hdu 1166 树状数组
题意:单点修改,区间求和 树状数组入门。。 #include #include #include #include #define rep(i, j, k) for(int i = j; i <= k; i++) #define maxn 200009 using namespace std; int n, a[maxn], f[maxn]; int lowbit (in原创 2016-09-03 15:21:42 · 197 阅读 · 0 评论 -
hdu 4614 线段树+二分
题意:n个花瓶,m个操作,花瓶里面有的有花,有的是空的。1操作是从a开始往右放b朵花,花瓶有了的不放,跳过,直到a右边都放满了花,多余的扔了。输出本次放花的起始位置 求和操作可以用线段树解决,操作1的放置的起始位置,通过二分求就可以 #include #include #include #include #include #define rep(i, j, k) for(in原创 2016-09-03 15:28:48 · 233 阅读 · 0 评论