声明:本文参考 Xuetangx 数据结构 丁俊晖 老师的相关课程,不失为一个个人总结。首先,这肯定是一个简单而且看起来一目了然的命题。对于有序向量,特别注意是“有序”向量,抓住重要的一个特点,那就是,相同的元素必然是在同一个不间断的区段内的,即相同的元素都是紧邻的构成一个区间。像这样:最后要做到:...
分类:
编程语言 时间:
2014-10-24 01:38:57
阅读次数:
165
题意: 给一个矩阵,每次查询一个子矩阵内的最大最小值,然后更新子矩阵中心点为(Max+Min)/2.解法: 由于是矩阵,且要求区间最大最小和更新单点,很容易想到二维的线段树,可是因为之前没写过二维的线段树,所以没跳出来。后来熟悉了一下,原来很多细节地方都没有考虑到。这里build,update,qu...
分类:
其他好文 时间:
2014-10-24 01:35:48
阅读次数:
227
题目链接:ural 1019 Line Painting
题目大意:一个0~1e9的区间,初始都是白的,现进行N次操作,每次将一段区间图上一中颜色。最后问说连续最长的白色区间。
解题思路:线段树区间合并,每个节点即维护一个区间,很经典。注意坐标需要离散化,但是还是要将0和1e9放进去。
#include
#include
#include
using namespace st...
分类:
其他好文 时间:
2014-10-24 00:21:20
阅读次数:
227
题目链接:poj 2481 Cows
题目大意:给定若干的区间,问说每个区间被多少个区间完全包含。
解题思路:将区间按照区间左端点小的,右端点大的排序,然后扫描一遍,每次查询[r,maxn],然后在r处添加1。注意
区间相同的情况,需要添加,但是不需要查询,直接和前一个的是相同的。
#include
#include
#include
using namespace s...
分类:
编程语言 时间:
2014-10-24 00:20:42
阅读次数:
209
题意:统计最后有多少对[i,j]使得其区间内所有的值的或的值#include #include #include #include #include #include #include #include #include #include #include #include using namesp...
分类:
其他好文 时间:
2014-10-23 20:37:17
阅读次数:
147
二分法查找(折半查找)的基本思想:前提:顺序存储且元素有序(1)确定该区间的中点位置:mid=(low+high)/2min代表区间中间的结点的位置,low代表区间最左结点位置,high代表区间最右结点位置(2)将待查a值与结点mid的关键字(下面用R[mid].key)比较,若相等,则查找成功,否...
分类:
其他好文 时间:
2014-10-23 20:29:48
阅读次数:
118
题目链接:fzu 2136 2136 取糖果
题目大意:略。
解题思路:线段树区间合并。将袋子按照个数排序,每次将最小的放入线段树,如果当前连续的个数超过区间,那么说明最小值即为最后加入的袋子糖果个数。
#include
#include
#include
#include
using namespace std;
const int maxn = 1e5 + 5;
#...
分类:
其他好文 时间:
2014-10-23 19:19:10
阅读次数:
181
树链剖分是解决在树上进行插点问线,插线问点等一系列树上的问题
假如现在给你一棵树,然后没两条边之间有一条权值,有一些操作,1:x---y之间的最大权值是多少,2:改变x---y之间的权值
当前这样的操作有很多,如果直接用暴力的方法的话肯定不行,那么就要想一个好的方法,我们可以想一下能不能借助线段树解决,能不能想一种方法对树上的边进行编号,然后就变成区间了。那么我们就可以在线段树上进行操作了...
分类:
其他好文 时间:
2014-10-23 17:48:23
阅读次数:
285
题目大意:数轴上有n个点,每个点重量1 ,可以移动其中k个点到任何位置, 使得题中式子的值最小
解题思路:选择保留区间长度为N - K的连续的数, 然后其余的K个数都移动到这N-K个数的中心。
那个式子其实表示的是方差,选择的点越密集,方差越小,所以选择连续的N-K个。其余的如果放到其他地方,肯定没有放到N-K的质心更优。
但这样每次枚举长度为N-K的区间,再计算相应的方差,复杂度为O(NK),会超时。所以通过数学推导变形,避免重复计算。具体如下:
第i个到第i+n-k-1个的
方差 = (Xi - X...
分类:
其他好文 时间:
2014-10-23 09:34:28
阅读次数:
260
看不懂题,就不能写的稍微像人话点吗我去。。。题目就是要找一段区间使得Σai mod m的值最大。于是嘛。。。前缀和一下再贪心就好了。先求出前i个数的前缀和s,然后用s更新解。还有可能就是前面的某个前缀和s1刚好在mod m意义下大于s且是最小的一个,那么这一段的和就是m + s- s1,再用它来更新...
分类:
其他好文 时间:
2014-10-22 23:25:46
阅读次数:
182