上一页 1 ··· 46 47 48 49 50 51 52 53 54 ··· 66 下一页
摘要: http://acm.hdu.edu.cn/showproblem.php?pid=1540题义是对于一段线段,D x 表示破坏x点,R 表示回复最近一次被破坏的点,Q x表示询问以x点为中心的两头的最长的连续区间。改了2个小时,终于A掉了,吐血啊,尤其是杭电的测试数据,一个点可以破坏多次,这小日本鬼子也忒坏吧,再说了如果一个点破坏多次,八路军叔叔也要修理多次吗,题义与实际既不符合,还是POJ厚道。该题分两部来做,首先是建立一棵线段树,这颗线段树应该保留有一下信息:1. 该区间的左连续长度,右连续长度2. 该区间的覆盖情况(即是否没有发生任何破坏)这是线段树以空间换时间的地方然后就是求连续的区 阅读全文
posted @ 2012-02-28 10:05 沐阳 阅读(643) 评论(0) 推荐(0) 编辑
摘要: http://acm.hdu.edu.cn/showproblem.php?pid=3030该题题义就是给定一个长度为M的A数组,依照这个数组生成一个长度为N的数组,然后求严格增长的子串个数。对于所给定的值进行离散化排序,再巧用树状数组求个数。代码如下:#include <cstdlib>#include <cstring>#include <cstdio>#include <map>#include <algorithm>#define MOD 1000000007#define MAXN 500005using namespace 阅读全文
posted @ 2012-02-26 21:02 沐阳 阅读(430) 评论(0) 推荐(0) 编辑
摘要: http://acm.hdu.edu.cn/showproblem.php?pid=2642裸二维树状数组,题义就是求一块面积内处于发亮状态的星星的个数。代码如下:#include <cstdlib>#include <cstring>#include <cstdio>#include <algorithm>#include <map>#define MAXN 1005using namespace std; int c[MAXN+5][MAXN+5], N;bool B[MAXN][MAXN];inline int lowbit(i 阅读全文
posted @ 2012-02-26 13:44 沐阳 阅读(251) 评论(0) 推荐(0) 编辑
摘要: http://acm.hdu.edu.cn/showproblem.php?pid=1541题义为给定N个点按照先x轴,后y轴坐标排序,求某一点的左下角的星星数量,刚开始用二维的树状数组来做,结果肯定是内存不过用。该题正解为在给定的坐标点的排序后,只对x轴坐标建立一个一维数组,对于当前状态按x轴将平面划分成M个区域,由于给定的点的y轴坐标一定是当前最高的,所以直接对横坐标前求和即可。代码如下:#include <cstdlib>#include <cstring>#include <cstdio>#include <algorithm>#incl 阅读全文
posted @ 2012-02-26 11:08 沐阳 阅读(330) 评论(0) 推荐(0) 编辑
摘要: http://acm.hdu.edu.cn/showproblem.php?pid=3887做树状数组专题,竟然还是没有看出这题可以用树状数组来写,表示有点不好意思啊。原来树状数组之所以能够搞定这一题是因为我们在建立好一棵数时,通过反问一个节点的子孙们后,顺序对的变化数来统计有多少数字比该节点小的子孙节点。该题用DFS搜索直接爆栈,所以恶心的写了一个模拟栈,其实要注意的就是每个节点要在第一次出栈时保留在栈,第二次才从栈中出去,亦即是当其孩子节点都被反问完之后。这题还有一点不得不说的就是给定的边的关系没有确定,要建立一个双向的邻接表,这就相对与给定的点可以从不同的方向来看其从属关系,而给定的根节 阅读全文
posted @ 2012-02-25 22:04 沐阳 阅读(440) 评论(0) 推荐(0) 编辑
摘要: http://acm.hdu.edu.cn/showproblem.php?pid=1542该题就是给定N个矩形,求出叠加之后的面积,与求面积交类似,就是覆盖次数没有了要求。代码如下:#include <cstdlib>#include <cstring>#include <cstdio>#include <cmath>#include <map>#include <algorithm>#define MAXN 205using namespace std;struct Node{ double x, y1, y2; in 阅读全文
posted @ 2012-02-25 01:28 沐阳 阅读(344) 评论(0) 推荐(0) 编辑
摘要: http://acm.hdu.edu.cn/showproblem.php?pid=1255题义为给定N个矩形,求其重叠的图形面积,该题采用线段树离散化y轴坐标,并且采用分割思想,只依据x坐标来进行分割。我们将N个矩形化为N*2条线段来处理,该结构体中的成员变量为 x, yl, yh, 分别是x轴坐标,相对高低的y轴坐标,即线段的两个端点值。1.将所有的线段排一次序,并将y轴所有坐标轴点排序并进行离散化;2.在从左往右扫描每一条线段时,我们应该理解为此时我们将把该线段的右边区域认定为全部被覆盖;3.查找该x轴坐标下被覆盖的y轴坐标的次数,因为一旦y轴被覆盖,则说明其右边无限长的区域被覆盖,如果 阅读全文
posted @ 2012-02-24 21:33 沐阳 阅读(739) 评论(0) 推荐(0) 编辑
摘要: http://acm.hdu.edu.cn/showproblem.php?pid=1561题目大意就不说了,都中文题...... 该题看起来计较复杂,上课的时候想了想,对于每个节点而言攻击T次,那么分配给孩子节点的次数的组合数是庞大的。然而这道题就是很暴力,DFS下面三重for循环。for循环里面就是背包过程了。吴涛的建议使得程序更加的好,对于每一个递归能够攻击的次数减1,这样能够减少许多不必要的if判断。代码如下:#include <cstdlib>#include <cstring>#include <cstdio>#include <algor 阅读全文
posted @ 2012-02-23 15:01 沐阳 阅读(388) 评论(0) 推荐(0) 编辑
摘要: 该题题义是求一个序列中非递减的子序列的个数,其实就是一个求逆序对的题,这里当然就是用树状数组来解决了。首先对输入数据进行离散化,以便于在树状数组上面工作,然后利用DP公式计算ans[i] = sum{ ans[j], j < i },可以理解为在前面的所有满足要求的集合上加上这个较大的数。参看http://www.cppblog.com/menjitianya/archive/2011/04/06/143510.aspx代码如下:#include <cstring>#include <cstdio>#include <algorithm>#includ 阅读全文
posted @ 2012-02-19 10:30 沐阳 阅读(379) 评论(0) 推荐(0) 编辑
摘要: 二维树状数组的模板题了,初始化的时候注意下,不用逐个插入,而是直接用lowbit这个函数。#include <stdio.h>#include <string.h>#include <stdlib.h>#include <math.h>#define MAX 1005int c[MAX][MAX];;inline int lowbit( int x ){ return x & -x; }inline void modify( int x, int y, int val ){ for( int i = x; i <= 1001; i 阅读全文
posted @ 2012-02-15 21:02 沐阳 阅读(451) 评论(0) 推荐(0) 编辑
上一页 1 ··· 46 47 48 49 50 51 52 53 54 ··· 66 下一页