题目链接:点击打开链接
题意:
给定一个点集
添加一些点后再把这个点集输出来。
添加完点后使得对于点集内任意2个点都满足下面2条中至少一条
1、在同一水平线上或在同一垂直线上
2、所围成的矩阵里有其他点。
思路:
平面分治
#pragma comment(linker, "/STACK:1024000000,1024000000")
#include
#include...
分类:
其他好文 时间:
2014-10-03 01:59:23
阅读次数:
558
线段树(interval tree) 是把区间逐次二分得到的一树状结构,它反映了包括归并排序在内的很多分治算法的问题求解方式。
上图是一棵典型的线段树,它对区间[1,10]进行分割,直到单个点。这棵树的特点
是:
1. 每一层都是区间[a, b]的一个划分,记 L = b - a
2. 一共有log2L层
3. 给定一个点p,从根到叶子p上的所有区间都包含点p,且其他区间都不包...
分类:
其他好文 时间:
2014-10-02 09:14:52
阅读次数:
196
这题看起来和max subarray差不多,只是加法变乘法,尝试过用分治法,发现划分情况的时候特别麻烦。于是分析下这题本身的特点:1、对0较敏感,一旦有0,乘积就不变了,所以需要在遇到0 的时候将数组拆分2、如果没有0, 一旦相乘,绝对值肯定会变大,所以仅考虑正负号的问题就够了。若整个数组相乘是一个...
分类:
其他好文 时间:
2014-09-30 17:23:59
阅读次数:
206
分治法求最近点对
递归将点不断分成小组,计算最短距离。此时的最短距离仅仅是两点都属两块的某一块(这里的分割点是mid点)。
还需要考虑两点分属两块的情况。这时对于选点则把范围缩小到了以mid为中心。再将距离mid点x轴2*mindist范围点考虑在内。在这些点中,再取mid点,留下那些
y的距离不大于middist 的点进行距离计算。
PS:刚开始min函数写错了,写成了max,一...
分类:
其他好文 时间:
2014-09-30 11:50:35
阅读次数:
142
快排具有递归和分治的思想,实现步骤如下。
第一步:对数组A中的第一个元素x执行操作,使得数组变成新的数组B,B中C段表示小于x的元素,D段表示大于x的元素
第二步:把C段,D段,当成2个独立的数组,然后对这2个数组执行类似于第一步中A的操作
第三步:这样B和D数组又同样被分成了三部分,依次类推反复执行相同的操作。
代码:
#include
using namespace std;...
分类:
其他好文 时间:
2014-09-30 08:22:22
阅读次数:
175
归并排序基本思想:将两个或两个以上的有序子序列“归并”为一个有序子序列。在内部排序中,通常采用的是2-路归并排序,即将两个位置相邻的有序子序列“归并”为一个有序序列。类似于快排,其使用的也是分治的策略。二路归并排序基本思想:将有n个记录的原始序列看做n个有序子..
分类:
其他好文 时间:
2014-09-30 04:38:12
阅读次数:
191
题目:求从s开始的递增序列(每次加1),求出他们加和不小于D的那个最后的加数。
分析:数学题,分治。s + s+1 + ... + n = n*(n+1)/2 - s*(s-1)/2 = (n+s)*(n-s+1)/2。
直接二分答案即可(二分范围0~10^8)。
说明:(⊙_⊙)。
#include
#include
using namespace st...
分类:
其他好文 时间:
2014-09-29 20:56:21
阅读次数:
275
题目大意:
维护一个W*W的矩阵,初始值均为S.每次操作可以增加某格子的权值,或询问某子矩阵的总权值.修改操作数M
POJ1195的加强版
没记错的话上午这题还没有中文题目描述的说0.0 好迅速
首先这题看到W就知道二维树状数组挂了 看到M就发现离散化了也搞不了 0.0
这题似乎是CDQ分治被发现之后第二个解决的题目。。。不过只有会员才知道的世界,今天反应过来刷刷。。。
修改和询问...
分类:
其他好文 时间:
2014-09-29 20:44:31
阅读次数:
169
终于到了经典的快排了,作为20世纪科学和工程领域十大算法之一,自60年代发明以来,一直吸引着一批批工程师和科学家对其改进,今天我们就分析快排算法以及它的几种改进方案。快速排序概述:快速排序算法也是基于分治思想的方案,与归并排序不同的是,它是原地排序,同时可以将长度为N的数组排序所需的时间和NlogN...
分类:
其他好文 时间:
2014-09-29 13:14:30
阅读次数:
181
算法是采用分治法(Divide and Conquer)的一个非常典型的应用。首先考虑下如何将将二个有序数列合并。这个非常简单,只要从比较二个数列的第一个数,谁小就先取谁,取了后就在对应数列中删除这个数。然后再进行比较,如果有数列为空,那直接将另一个数列的数据依次取出即可。 1 //将有序数组a[]...
分类:
其他好文 时间:
2014-09-28 14:31:12
阅读次数:
204