自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(97)
  • 资源 (1)
  • 收藏
  • 关注

原创 HDU 3255 Farming(线段树:扫描线)

HDU 3255 Farming(线段树:扫描线)http://acm.hdu.edu.cn/showproblem.php?pid=3255题意:多个可能重合的长方体求体积.分析:       该题只要把种子的价值转化为Z轴坐标[0,pi],就可以看成了重叠长方体就总体积的问题.解法类似HDU3642:http://blog.csdn.net/u013480600/artic

2014-03-31 23:34:17 824

原创 POJ 2464 Brownie Points II(线段树:扫描线)

POJ 2464 Brownie Points II(线段树:扫描线)http://poj.org/problem?id=2464题意:平面上有很多点,然后stan通过一个点画了一条竖线,ollie通过已经被该竖线穿过的点画了一条横线.现在平面被分成了4个象限了.stan获得的分数是1,3象限的点数,ollie获得的分数是2,4象限的点数.由于stan先画竖线,他可以保证在让自己可能获得的

2014-03-31 21:08:59 1291

原创 POJ 2482 Stars in Your Window(离散化+线段树:扫描线)

POJ 2482 Stars in Your Window(离散化+线段树:扫描线)http://poj.org/problem?id=2482题意:有很多点在二维平面内,每个点有一个价值,给你一个平行坐标轴的矩形,只可以移动矩形,问矩形最多能包括多少价值和的点.分析:       本题首先要转换一下,我们用矩形的中心点来描述这个矩形,然后对于每个星星,我们建立一个矩形中心的活动范

2014-03-31 15:26:13 1055

原创 HDU 3642 Get The Treasury(离散化+线段树:扫描线)

HDU 3642 Get The Treasury(离散化+线段树:扫描线)http://acm.hdu.edu.cn/showproblem.php?pid=3642分析:       本题要求的是重叠3次及以上的立方体体积,由于Z轴范围很小,可以枚举Z轴,然后固定了Z轴之后,就是求二维矩形的面积交>=3次的总面积了.其实Z轴就算很大也可以求,只需要把Z轴离散化即可.比如Z轴从小

2014-03-31 00:37:22 1750

原创 HDU 3265 Posters(线段树:扫描线)

HDU 3265 Posters(线段树:扫描线)http://acm.hdu.edu.cn/showproblem.php?pid=3265分析:       这道题目WA了我很久,我一开始想用之前的模板直接套用的,不过有很多细节没处理好,结果捷径没走成还是错漏百出.       首先本题与HDU1542很相似,可以用几乎一样的基本方法解决.http://blog.csdn.

2014-03-30 21:02:11 1129

原创 HDU 1828 Picture(线段树:扫描线)

HDU 1828 Picture(线段树:扫描线)http://acm.hdu.edu.cn/showproblem.php?pid=1828分析:       本题和HDU1542类似,详解请见: http://blog.csdn.net/u013480600/article/details/22548393下面继续拿HDU1542的两个矩形为例分析:不过由于本题求得是周

2014-03-30 13:21:09 1618 2

原创 HDU 1542 Atlantis(线段树:扫描线)

HDU1542 Atlantis(线段树:扫描线)题意:二维平面有n个平行于坐标轴的矩形,现在要求出这些矩形的总面积. 重叠部分只能算一次.分析:       首先假设有下图两个矩阵,我们如果用扫描线的方法如何计算它们的总面积呢?首先我们将矩形的上下边分为上位边(即y坐标大的那条平行于x轴的边),和下位边(y坐标小的平行于x轴的边).然后我们把所有矩形的上下位边按照他们y坐标

2014-03-30 01:46:38 9511 14

原创 HDU1540 Tunnel Warfare(线段树:维护最大连续子串)

HDU1540 Tunnel Warfare(线段树:区间合并)http://acm.hdu.edu.cn/showproblem.php?pid=1540分析:       首先先来分析题目中的3种操作:1.D x: 该操作就是单点更新2.Q x: 该操作可以分解为查区间[1,x]的最大连续0后缀长L和区间[x,n]的最大连续0前缀长R,则R+L-1即为所求.有关前缀查询和后

2014-03-29 19:18:43 1738 1

原创 HDU 2871 Memory Control(线段树:区间合并)

HDU 2871 Memory Control(线段树:区间合并)http://acm.hdu.edu.cn/showproblem.php?pid=2871分析:       首先分析题目中能进行的几种操作:1.    Reset: 所有内存单元置02.    New x:申请一块包含连续x个单元的空闲内存块3.    Freex: 释放包含x号单元的(已被占用)内存块

2014-03-29 16:43:31 1040

原创 HDU 3397 Sequence operation(线段树:成段更新,查询连续目标子串长度)

HDU 3397 Sequence operation(线段树:成段更新,区间合并)分析:注意在总的query地方可以不用编写查询前缀和后缀的函数,特别注意优化二的地方.       1.本题有点类似于POJ3225:http://blog.csdn.net/u013480600/article/details/22284341也是同时有cover操作和异或操作,但是这里用异或标记

2014-03-28 22:29:58 1071

原创 HDU 3308 LCIS(线段树:单点更新,求最大连续子串)

HDU 3308 LCIS(线段树:单点更新,区间合并)分析:      首先题目中找的递增序列是严格增加的,如果有7,7这样的序列不算递增.其次本题是单点更新,所以不用PushDown,只用PushUp就行.       线段树维护信息:val(表节点的值,只有子节点有用,这个信息也可以不维护的),sub(最长上升子序列的长度),pre(最长上升前缀的长度),suf(最长上升后缀的长

2014-03-28 18:58:10 2473

原创 POJ 3667 Hotel(线段树:区间覆盖,维护最大连续子区间)

POJ 3667 Hotel(线段树:区间合并)分析:       首先本题类似于UVA1400 ,所有区间合并类的线段树基本都需要维护3类信息:最大区间,最大前缀,最大后缀.       维护一棵线段树,该线段树每个节点维护信息:在该节点所代表的区间内的覆盖情况cover: 为0时表示没有被覆盖,为1时表示被覆盖了,为-1时表示子节点中既有被覆盖的也有没被覆盖的.最长连续区间长度

2014-03-28 16:46:52 2112

原创 POJ 2991 Crane(线段树:维护向量+计算几何)

POJ 2991 Crane(向量旋转+线段树_成段更新)分析:       首先一个向量(x,y)逆时针绕起点旋转rad度后得到的向量为:newx = x*cos(rad)-y*sin(rad)   newy = x*sin(rad)+y*cos(rad)然后我们要知道另外一个事实:如果一条折线由多个向量构成,那么这条折线段的终点坐标一定为起点+向量1+向量2+..+向量n的结果

2014-03-28 02:13:00 1629 1

原创 POJ 2777 Count Color(线段树:区间覆盖)

POJ 2777 Count Color(线段树:成段更新)分析:本题是POJ 1436的弱化版本:http://blog.csdn.net/u013480600/article/details/22313189       首先本题的区间是一个一个的整数,所以不用乘2考虑开区间闭区间的问题了.所以这里的线段树维护一个color信息,其中color>0表示节点所指的区间都有某种颜色

2014-03-27 22:14:07 1374 1

原创 POJ 1436 Horizontally VisibleSegments(线段树:区间覆盖染色)

POJ 1436 Horizontally VisibleSegments(线段树:成段更新+区间开闭)分析:1.    首先读入所有的线段,然后按x轴坐标从小到大排序,然后我们一次处理每条线段,用一个二维矩阵mark[i][j]保存第i条线段和第j条线段之间的关系.(如果相互可以看到,则mark为true,否则为false). 2.    下面的问题是如果求出任意两线段之间的可见

2014-03-27 19:26:25 1500 1

原创 POJ 3225 Help with Intervals(线段树:区间置0/1,区间异或)

POJ3225 Help with Intervals(线段树:成段更新,开闭区间)分析:找到几个小BUG,直接AC了,还是需要写出自己的所有思路,才比较好写代码.   首先这道题目要处理区间,所以我们在线段树的各个节点用0表示不包括,1表示包括,-1表示子节点中既有包括又有不包括.下面分析对应的5种操作,假设T表示的区间是[l,r]:U T: [l,r]区间置1I T: [0,l

2014-03-27 13:57:00 3551

原创 UVA 1400 "Ray, Pass methe dishes!"(线段树,区间合并)

UVA 1400 "Ray, Pass methe dishes!"(线段树,区间合并)分析:       本题比较复杂,详解见:刘汝佳训练指南P201       建立一棵线段树,每个节点维护下面3种信息max_sub,max_prefix和max_suffix,分别表示最大连续和,并保存相应的坐标信息x[],y[],p[],s[].然后对于一个查询[20,50]区间的最大连续和,由

2014-03-26 23:33:01 1372

原创 HDU 1698 Just a Hook(线段树:区间set,区间查询)

HDU 1698 Just a Hook(线段树:区间set,区间查询)分析:线段树区间set基本操作,详情看刘汝佳训练指南。//HDU 1698 线段树 区间set 区间查询#include#include#includeusing namespace std;#define lson i*2,l,m#define rson i*2+1,m+1,rconst int MA

2014-03-26 19:18:05 1250

原创 POJ 3468 A Simple Problemwith Integers(线段树:区间add,区间查询)

POJ 3468 A Simple Problemwith Integers(线段树:区间add,区间查询)分析:基本题型。熟练代码模板。AC代码:1797ms//POJ 3468 区间add,区间查询#include#include#includeusing namespace std;//每当有add加到i节点上,直接更新i节点的sum.//也就是说如果要查询区间[1

2014-03-26 19:16:58 1199

原创 POJ 2528 Mayor's posters(离散化+区间set线段树)

POJ 2528 Mayor's posters(离散化+区间set线段树)分析:       首先题目的区间范围高达1000W,如果直接计算可能超内存且超时间。所以需要离散化。       离散化一:比如对于如下区间集合,[1,1000],[500,2000],[1500,2500].那么把所有区间端点1,500,1000,1500,2000,2500离散化后就是1,2,3,4,5,

2014-03-26 19:14:56 1172 2

原创 POJ 2886 Who Gets the MostCandies?(线段树+模拟+求数的约数个数)

POJ 2886 Who Gets the MostCandies?(线段树+模拟+求数的约数个数)分析:       首先建立一棵线段树,其每个叶节点都是1(代表每个孩子都在圈中,如果第i个孩子不在圈中,那么就令第i个叶子(不一定编号为i)sum=0)。分析题中的例子:4 2Tom 2Jack 4Mary -1Sam 1       假设我们第一个出去的孩子是

2014-03-26 00:02:04 1152

原创 POJ 2828 Buy Tickets(线段树:查找并更新从左到右第i个1)

POJ 2828 Buy Tickets(线段树,逆推)分析:       本题的解法类似于POJ 2182:http://blog.csdn.net/u013480600/article/details/21574467       首先对于这种一个一个元素插入队列的例子,我们可以用链表来实现,插入时间为O(1),但是每次找到正确的插入位置pos,需要的时间是O(n),那么如何快

2014-03-25 19:38:14 1200

原创 HDU 2795 Billboard(线段树:找到线段树中>=给定值的第一个元素位置 并 更新该点)

HDU 2795 Billboard(线段树:单点更新,区间查询)分析:       首先由于有n(n      注意: 如果h比n小,那么线段树的节点总数定为h个,否则定位n个.如果wi>w,那么直接输出-1.       现在我们依次读入wi,找到能放下wi的序号最小的线段树叶节点,然后更新线段树即可.       其中线段树中节点维护的信息是:本节点控制的区间[L,R

2014-03-25 11:55:15 1394

原创 HDU 1394 Minimum Inversion Number(线段树:单点更新,区间求和)

HDU 1394 Minimum Inversion Number(线段树:单点更新,区间求和)分析:      首先对于读入的每个a[i],执行a[i]++操作.使得序列变成1到n之间.首先利用线段树求出初始序列a1,a2…an的逆序数ans.类似于树状数组对逆序的求法.详解:http://blog.csdn.net/u013480600/article/details/21

2014-03-25 00:29:41 1040

原创 HDU 1754 I Hate It(线段树:单点替换,区间最值)

HDU 1754 I Hate It(线段树:单点替换,区间最值)分析:依然是线段树的基本操作.详解:http://www.notonlysuccess.com/index.php/segment-tree-complete/AC代码: 515ms//HDU1754#include#include#includeusing namespace std;const

2014-03-24 23:42:06 1203

原创 HDU 1166 敌兵布阵(线段树:点更新,区间求和)

HDU 1166 敌兵布阵(线段树:点更新,区间求和)分析:线段树基本应用.参考资料:http://www.notonlysuccess.com/index.php/segment-tree-complete/AC代码:203ms#include#includeusing namespace std;#define lson i*2,l,m#define rson

2014-03-24 23:15:26 1262

原创 HDU 2888 Check Corners(简单二维RMQ)

HDU 2888 Check Corners(简单二维RMQ)分析:基本的二维RMQ应用.注意题目中存的矩阵是无符号整数的矩阵.AC代码:3625ms#include#include#includeusing namespace std;const int MAXN =305;unsigned int val[MAXN][MAXN];unsigned int

2014-03-24 16:31:39 1067

原创 POJ 2019 Cornfields(简单二维RMQ)

POJ2019 Cornfields(简单二维RMQ)分析:基本的二维RMQ查询.类似于二维树状数组问题,二维RMQ问题就是求一个矩阵N*M中的一个小块矩阵内的最值问题.其中dmin[i][j][ii][jj]=x表示以(i , j)为左上角,以( i+(1为右下角的矩阵内的最小值.dmax的值类似.      下面dmin[i][j][ii][jj]的值如何求呢?首先我们知道

2014-03-24 15:51:36 1636

原创 HDU 3193 Find the hotel(RMQ)

HDU 3193 Find the hotel(RMQ)分析:      首先本题与UVA 11020很相似,不过本题是xi且yi才算有优势,UVA11020 xi且yi<yj或 xi且yi<=yj就算有优势的.http://blog.csdn.net/u013480600/article/details/21948379      首先读入所有的旅店,然后对于每个

2014-03-24 13:56:26 1065 2

原创 UVA 11020 Efficient Solutions(C++STL应用)

UVA 11020 Efficient Solutions(C++STL应用)分析:详解请看刘汝佳的训练指南P228:优势人群.首先将所有读入的(x,y)点用多重集multiset保存,按照x小放前面,如果x值相等,则y值小的放前面.假设当前处理的是(xi,yi),那么用用lowbound函数找到(xi,yi)的上确界s位置,如果s位置是多重集的开头,则直接插入.如果s不是开头,这

2014-03-24 12:55:28 1237

原创 POJ 2452 Sticks Problem(二分+RMQ)

POJ 2452 Sticks Problem(二分+RMQ)分析:首先知道,当给出的序列是递减的(不用严格递减)话就一定不存在给定的序列.   然后用二分法假设我们当前猜测存在长度为temp的要求序列,所以我们需要去验证是否存在这样的序列.   首先可以尝试用队列扫描的方式,一个一个的读入a[i],然后设定L为左合法边界(即最小值a[L]),然后判断当前读入的a[i]是否合法(即

2014-03-24 01:15:59 1390

原创 POJ 3162 Walking Race(树形DP+单调队列)

POJ 3162 Walking Race(树形DP+单调队列)分析:首先这道题和HDU4123很像,不过这道题目数据规模很大,空间有限,不能用RMQ求解了,要用单调队列进行第二步处理。HDU4123:http://blog.csdn.net/u013480600/article/details/21834553       依然先树形DP,求出所有的d[i]距离,然后对于m找出最长的

2014-03-23 01:19:39 1213

原创 HDU 4123 Bob’s Race(树形DP+RMQ)

HDU 4123 Bob’s Race(树形DP+RMQ)分析:本题要找的最大的连续区间的长度L,使得这个区间中的f[i]值最大与最小之差。该区间不一定从1开始。首先用DP求出f[i],f[i]即从i点出发能走的最长距离。然后用RMQ来解决每个询问。1.     求f[i]。求法请见HDU2196:http://blog.csdn.net/u013480600/article/

2014-03-22 23:34:30 1056

原创 HDU 2196 Computer(树形DP)

HDU 2196 Computer(树形DP)分析:求一个树中所有节点能到达的最远距离f[i]。要用两个dfs。首先第一个dfs求出所有每个节点i在其子树中的正向最大距离和正向次大距离和dist[i][0]和dist[i][1](如果i节点在子树中最大距离经过了2号儿子,那么次大距离就是不经过2号儿子的最大距离)。并且还要标记longest[i]=j表示节点i在其子树中的最大距离经过了节点

2014-03-22 22:38:46 4731

原创 HDU 4122 Alice's mooncake shop(RMQ:动态最值)

HDU 4122 Alice's mooncake shop(RMQ)分析:大致思想就是读入时间,然后换算成从0到M-1之间的第x个小时,然后在【x-T,x】区间内用RMQ查找生产月饼的最小成本。然后用最小成本乘以月饼数即是该条order的成本了。不过这里查询最小值函数getMin返回的是最小成本的编号i,而且比较最小值的函数也要自己写过,并不是单纯的比较值而且要考虑S(即保存成本)和

2014-03-22 17:19:56 948

原创 HDU 3183 A Magic Lamp(贪心 or RMQ)

HDU 3183 A Magic Lamp(贪心+RMQ)分析:1.       首先考虑对于n个数字组成的数,只删除1位的情况。比如176832,删除一位使得剩下的数值最小。结果是删除7而不是删除8所以可知并不总是删除最大的那个数字。一种可行的贪心策略是:对于n位数构成的数删除m位,每次总是删除这样的a[i]:它是第一个a[i]>a[i+1]的数,如果不存在则就删除a[n]。详见

2014-03-21 16:34:17 1295

原创 POJ 3264 Balanced Lineup(简单RMQ)

POJ 3264 Balanced Lineup(简单RMQ)分析:RMQ问题的简单应用。AC代码:1641ms#include#include#includeusing namespace std;const int MAXN=50000+1000;int dmax[MAXN][20];int dmin[MAXN][20];int d[MAXN];void initM

2014-03-21 14:23:53 1085

原创 POJ 3368 Frequent Values(RMQ)

UVA 11235 Frequent Values(RMQ)分析:刘汝佳:训练指南P1981.      本题主要思想是把输入序列分成一段段由相同值构成的序列,然后对于每个查询[L,R]看他覆盖了那些段,只要再这些连续的段范围内找出现的最大值即可,即RMQ问题2.      由于a[n]是升序排列的,所以给a数组游程编码为(v,num)其中v是a[i]的值,num是v这个相同的值出

2014-03-21 13:38:15 1221

原创 POJ 1990 MooFest(树状数组+离线处理)

POJ1990 MooFest(树状数组+离线处理)分析:因为要求max(vi,vj),所以先读入所有的牛,将牛按它的vi值从小到大排序,所以当前处理的牛总是vi值最大的。接下来就要算当前第i头牛的坐标xi和之前出现的所有牛的坐标之差的总和了。维护两个树状数组,数组1的sum(1,x)表示的是坐标值那么假设当前处理第i头牛,维护当前已经处理了的所有牛的坐标和total,并执行:ad

2014-03-20 21:20:59 1092

原创 POJ 2029 Get Many PersimmonTrees(二维树状数组or递推)

POJ2029 Get Many PersimmonTrees(二维树状数组or递推)分析:这道题看起来能用很多方法做:递推,二维树状数组。解法一:二维树状数组先用二维树状数组来做:即一颗一颗的把树插入到树状数组中,然后遍历所有可行的格子(x,y)求出由(x-S+1,y-T+1)为左上角,(x,y)为右下角构成的矩形内有多少个树即可,该值为:Sum(x,y)+sum(x-S,y-T

2014-03-20 19:46:11 728

0day安全代码

0day安全的这本书第二版的所有源代码和信息可以来看看

2014-09-09

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除