数据结构
文章平均质量分 84
ophunter
不会DP!
展开
-
zoj3284Matrix Processing(二维树状数组)
题目请戳这里题目大意:给一个矩阵,然后q个操作。有3种操作类型:op = 0:按行优先原则从(x1,y1)到(x2,y2)所有元素都加一个k。op = 1:按列优先原则从(x1,y1)到(x2,y2)所有元素都加上k。op = 2:查询(x,y)处元素值。题目分析:矩阵不大,但是查询很多。暴力会超时。于是高兴的写了一个二维线段树,结果华丽丽的TLE了。然后又不断调整姿势,还是T原创 2014-01-12 16:44:33 · 1466 阅读 · 0 评论 -
hdu4446 IT Companies(线段树)
IT CompaniesTime Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 290 Accepted Submission(s): 85Problem DescriptionThere are N IT c原创 2013-08-09 18:06:10 · 1073 阅读 · 0 评论 -
hdu4339 Query(简单线段树)
QueryTime Limit: 20000/10000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total Submission(s): 2059 Accepted Submission(s): 706Problem DescriptionYou are given two s原创 2013-08-08 21:05:11 · 903 阅读 · 0 评论 -
hdu3308 LCIS(简单线段树)
LCISTime Limit: 6000/2000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 2988 Accepted Submission(s): 1307Problem DescriptionGiven n integers.Yo原创 2013-08-08 14:27:14 · 976 阅读 · 0 评论 -
hdu3397 Sequence operation(线段树成段更新)
Sequence operationTime Limit: 10000/5000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 4699 Accepted Submission(s): 1368Problem Descriptionlxhgww原创 2013-08-08 12:45:33 · 1500 阅读 · 4 评论 -
hdu4441 Queue Sequence(线段树+splay)
题目请戳这里题目大意:有对队列的一系列操作,+i表示i入队,-i表示i出队,现在对这些操作进行操作。insert p表示在当前操作序列的第p号位置插入一个操作+i,其中i是当前操作序列中未出现的最小的正整数,p从0开始,i从1开始;同时将-i操作插入某个恰当的位置,保证这个位置尽量靠右,并且当从左往右扫描这个操作序列的时候,扫到-i的时候,当前队首元素为i;remove i表示将操作序原创 2013-08-19 14:37:46 · 1014 阅读 · 0 评论 -
hdu4267 A Simple Problem with Integers(多棵线段树)
A Simple Problem with IntegersTime Limit: 5000/1500 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 2520 Accepted Submission(s): 814Problem Description原创 2013-07-24 21:34:23 · 1474 阅读 · 1 评论 -
poj1056IMMEDIATE DECODABILITY(字典树)
->题目请戳这里题目大意:跟这题基本一样题目分析:略,练习一下徒手静态字典树,最后一道了。。详情请见代码:#include #include#include#includeusing namespace std;struct node{ int next[2]; int tag,end;}lcm[1<<16];char s[20];int f原创 2013-05-17 21:14:23 · 884 阅读 · 2 评论 -
poj2503Babelfish(Trie tree 或者map)
->题目还是戳这里题目大意:还是给你一个字典,翻译单词。题目分析:题目蛮简单,字典树练手题。不过STL可以水过。输入有点小刁难,需要小心点,其他的就没什么了。详情请见代码:#include #include#include#include#include#includeusing namespace std;const int N = 1000005;map lc原创 2013-05-17 20:30:21 · 862 阅读 · 0 评论 -
poj3076Sudoku(我大DLX威武!16*16数独秒解!!)
->题目请戳这里题目大意:16*16数独。题目分析:建模同这篇9*9数独,就不多废话了,详情请见代码:#include #include#include#includeusing namespace std;const int N = 16 * 16 * 16 * 16 * 16 * 4 + 5;//16 * 16 * 16行16 * 16 * 4列int s[N],h[N原创 2013-06-01 19:21:36 · 2139 阅读 · 0 评论 -
poj3074Sudoku(DLX解9*9数独)
->题目请戳这里题目大意:填9*9数独,就不多废话了。题目分析:以前写数独是用搜索做的,略带暴力枚举,代码量比较大,效率也不高,最近学dancing links,用来解决精确覆盖问题,效率蛮高,而且代码非常优雅。关于数独转化成精确覆盖问题,这篇论文讲的很详细,就不在这里班门弄斧了,详情请见代码:#include #include#include#includeusing nam原创 2013-06-01 18:52:59 · 1786 阅读 · 0 评论 -
hdu4614 Vases and Flowers(简单线段树 + 二分)
Vases and FlowersTime Limit: 4000/2000 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others)Total Submission(s): 1336 Accepted Submission(s): 532Problem Description Alice i原创 2013-08-10 16:28:37 · 1935 阅读 · 0 评论 -
hdu 4578 Transformation2013杭州邀请赛C(简单线段树)
TransformationTime Limit: 15000/8000 MS (Java/Others) Memory Limit: 65535/65536 K (Java/Others)Total Submission(s): 0 Accepted Submission(s): 0Problem DescriptionYuanfang is puzz原创 2013-08-10 15:18:40 · 2739 阅读 · 3 评论 -
hdu1754 I Hate It(splay或者线段树)
I Hate ItTime Limit: 9000/3000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 27434 Accepted Submission(s): 10889Problem Description很多学校流行一种比较的习惯。原创 2013-08-12 12:49:07 · 954 阅读 · 0 评论 -
poj2796Feel Good(笛卡尔树)
题目请戳这里题目大意:给n个数,求一个区间,使这个区间数字之和*这个区间最小值最大,给出这个最大值以及这个区间左右端点。题目分析:笛卡尔树。先按输入建一颗小堆笛卡尔树,然后dfs遍历一遍,直接求解。O(n)完美解决!笛卡尔树首先是一颗二分查找树,每一颗子树的dfs序列都是原序列的连续的子序列。再利用笛卡尔树堆的性质可以O(1)找出这个连续的子序列最小值,直接更新最大值即可。因为要求原创 2013-12-30 13:15:29 · 1415 阅读 · 0 评论 -
hdu4122Alice's mooncake shop(单调队列 | 线段树)
题目请戳这里题目大意:一个月饼店开m个小时(24小时营业),只在整点做月饼,做月饼的能力非常强。现在只需要考虑成本的问题。给m个cost值,cost[i]表示第i个小时做1个月饼的代价。再给n个时间,从2000年1月1日0时开始计算。表示订单的截止时间。当然为了节约成本,可以提前趁成本不高的时候做月饼。但是月饼有保质期,t天,月饼放冰箱保存也需要代价,一天花费s。现在求完成n个订单最小代价原创 2013-09-25 13:02:09 · 1099 阅读 · 0 评论 -
hdu4453Looploop(splay)
题目请戳这里题目大意:给一个数字串,长度n,首尾相连的。有一个对序列操作的指针,初始指向第一个数字。给m个操作,2个参数k1,k2。给6种操作:1:add x,在当前指针所在位置顺时针方向的k2个数字,每个数字加x。2:reverse,从当前指针所在位置开始顺时针方向k1个数字翻转。3:insert x,当前指针下一个位置加上一个x。4:delete,删除当前指针所在位置元素。原创 2013-10-10 20:16:11 · 1131 阅读 · 0 评论 -
hdu3727Jewel(划分树+二分)
题目请戳这里题目大意:给许多操作,4类:1,insert x,插入一个数x,x范围2^31内(题目描述有误)2,query_1 s t k,查询范围[s,t]内第k小的数,s3,query_2 x 查询x的rank,从小到大。x保证出现过4,query_3 x,查询[1,len]第x小的数。输出3个数,为3个询问累加和。题目分析:由于没有删除操作,所以加入的数字序列原创 2013-10-10 12:36:46 · 1277 阅读 · 0 评论 -
hdu4052Adding New Machine(线段树求矩形面积并)
题目请戳这里题目大意:给一个w*h的矩阵,给n个矩形,n个矩阵互不相交。再给一个1*m的矩形,要求与给定的n个矩形不相交,求能摆放的方案种数。题目分析:w和h很大,n有50000,所以离散化+线段树。因为要摆放的矩形是1*m的,所以这个矩形只有2种姿势:横着or竖着。所以从左向右扫描一遍,求出空地的面积并,从上向下扫描一遍,求剩余面积并相加即可。不过要对之前的n个矩形处理一下:对于第i个矩原创 2013-09-03 22:54:12 · 1194 阅读 · 0 评论 -
hdu4056Draw a Mess(线段树解法)
题目请戳这里题目大意:给一个n*m的矩形,有9中颜色,4种集合图形,q个操作,每个操作是将矩形中指定位置的某种几何形状的格子染相应的颜色。求最后9种颜色相应的数量。题目分析:第一眼感觉就是线段树,一开始想的是写个二维的线段树,然后就在想怎么更新比较快。发现二维线段树除了更新矩形外对于其他3个图形的更新毫无优势。如果一行一行的更新,太慢了。一直在纠结怎样快速成段更新其他3种几何图像。最后1个原创 2013-09-02 09:44:10 · 1069 阅读 · 2 评论 -
poj3580SuperMemo(splay丰富的操作)
SuperMemoTime Limit: 5000MS Memory Limit: 65536KTotal Submissions: 6668 Accepted: 2226Case Time Limit: 2000MSDescriptionYour friend, Jackson is invited to原创 2013-08-13 22:21:54 · 1686 阅读 · 3 评论 -
hdu3487 Play with Chain(splay)
Play with ChainTime Limit: 6000/2000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 2720 Accepted Submission(s): 1103Problem DescriptionYaoYao is原创 2013-08-12 20:33:50 · 1017 阅读 · 0 评论 -
hdu4699Editor
题目请戳这里题目大意:给5种操作:I x:当前光标出插入x;D:删除当前光标位置前的一个数;L:光标左移一位直至不能左移为止;R:光标右移一位直至不能右移为止;Q x:前x个数中的前缀和的最大值;题目分析:这是昨天多校最后一场的一个题。这题跟去年网络赛一道题目基本一样,操作还简单些。看到这题后直接联想到那道题了,但是对于Q操作,没想到好的解决办法,然后就脑残的来撸s原创 2013-08-23 16:20:03 · 985 阅读 · 0 评论 -
hdu3436Queue-jumpers(splay+离散化)
题目请戳这里题目大意:有一个队,n个人,编号1-n,有3种操作:top x:将编号x的人放到队列首;query x:查询编号x的人现在排在第几位;rank x:查询现在第x位的人编号;题目分析:splay。人数编号是10^8级别的,但是操作不超过10^5个,只需将top操作中的编号离散化就可以了,因为剩下的人都是连续的,所以将剩下的连续的人缩成一个点,只记录起始位置的人和连续长原创 2013-08-23 15:02:02 · 1004 阅读 · 0 评论 -
poj1151&hdu1542Atlantis(线段树+离散化+线扫描 VS 二维线段树)
->>题目戳这里 戳这里也行->_题目大意:二维平面内给n个矩形,求面积并。题目分析:线段树线段树~注意给定的坐标点是浮点数,所以要离散化。这题用线段树2种做法:1。线段树+离散化+线扫描。此法相对简单,对x轴坐标离散化建立一颗线段树,对所以矩形按矩形的相对高度排序,先插相对位置比较低的矩形,这样在y轴方向上可以方便的求出y方向上的并,因为排序后y方向上只要2种情况,后原创 2013-06-09 20:05:29 · 1054 阅读 · 0 评论 -
hdu4419Colourful Rectangle(线段树+离散化+扫描线)
->题目请戳这里题目大意:在二维平面内给n个矩形,矩形有3种颜色,不同颜色相交的部分就产生了不同的颜色,一共就有7种颜色。对于每个区域内的颜色与某中颜色覆盖的次数无关,只与覆盖的颜色种类有关,求最后这n个矩形相交产生7种颜色的面积。题目分析:这题和这道hdu1255思路基本是一样的,不过1255求的是重复覆盖2+次面积并,情况简单些,这里3种颜色一交就会产生7种情况,分析就稍微复杂一点点。原创 2013-06-18 14:12:41 · 913 阅读 · 0 评论 -
hdu1828Picture(线段树求矩形周长并)
->题目请戳这里题目大意:略题目分析:要求矩形周长并。看到这题觉得和这几天写的矩形面积并差不多,然后就直接敲了个线段树+扫描线,写差不多了才发现和面积并还是有区别的。然后仿照求面积并的方法,在线段树节点里面加各种信息,结果总是不对。重新理一下思路发现,求周长并只需要考虑2种情况:水平的边和竖直的边,水平的边不难求,在每插入一条扫描线的时候结算一下,当前区间被分成了几段,用分成的段数*2*当原创 2013-06-19 16:04:04 · 1519 阅读 · 0 评论 -
poj3468A Simple Problem with Integers(线段树成段更新)
->题目请戳这里题目大意:红果果的线段树,给n个数,2种操作,Q a b,查询a到b这个区间和,C a b c,a到b区间每个数加上c。题目分析:线段树维护区间和,要加lazy标记。详情请见代码:#include #include#includeusing namespace std;const int N = 100005;typedef __int64 ll;str原创 2013-06-08 10:02:32 · 937 阅读 · 0 评论 -
POJ3667Hotel(线段树)
->题目请戳这里->中文题目请戳这里题目大意:n个房间编号1-n,现在有2个操作:操作1,给一个数d,表示要预定d间连续的房间,如果没有输出0,如果有,输出最小的起始房间号。操作2,给一个区间a,b,表示编号a到b的房间清房。题目分析:线段树经典模型。这题并不难,不过要想清楚。我曾以为自己想清楚了,结果WA了一早上。。。主要思路:在线段树每个节点维护3个变量:maxlen表示当原创 2013-06-30 16:23:27 · 1196 阅读 · 0 评论 -
hdu3415Max Sum of Max-K-sub-sequence(单调队列)
->题目请戳这里题目大意:给n个数,这n个数首尾相连。求一个长度为不超过k的连续子序列最大和。并求出起始和终止位置。题目分析:求某段连续区间和的最大值,单调队列解决。具体做法是:先求出sum[1]到sum[n],我们考虑第i个数,用一个单调队列维护sum[i - k]到sum[i - 1]的最小值,设这个最小值是sum[j],那么sum[i] - sum[j]就是j到i的这个区间的最大连续原创 2013-05-16 23:03:45 · 1033 阅读 · 0 评论 -
poj2823Sliding Window(单调队列入门)
->题目请戳这里题目大意:给n个数字,求长度为k的数字串中最大最小值。题目分析:用2个单调队列分别维护最大值和最小值。单调队列入门题,废话不多说。详情请见代码:#include #includeusing namespace std;const int N = 1000005;int lcm[N];int mx[N],mn[N];int mxnum,mnnum;int原创 2013-05-16 23:08:42 · 805 阅读 · 0 评论 -
poj2630Phone List(静态Trie tree)
->题目请戳这里这题跟杭电1671一样,->详情请戳这里于是用1671的代码去提交了一发,结果TLE了。果断写成静态树,效率笋尖就上去了,从TLE到125ms,就是这么快!这个代码拿到杭电上重新提交一遍,效率也高出不少。从400+ms到93ms,果然静态数据结构效率高。这题与1671比还改进了一点,就是去掉了排序,在每个节点处加了一个变量tag,表示某条路径存在,end标记一个单词原创 2013-05-17 20:20:41 · 1013 阅读 · 0 评论 -
hdu1671Phone List(Trie tree)
->题目请戳这里题目大意:给一串数字,求判断是某个数字串是另一个数字串的前缀。题目分析:字典树。详情请见代码:#include #include#include#include#includeusing namespace std;typedef struct node{ struct node * next[10]; int tag;}tree;i原创 2013-05-14 20:48:11 · 857 阅读 · 0 评论 -
poj2528Mayor's posters(线段树+离散化+坑坑坑)
->题目请戳这里这题是个巨坑!!原创 2013-06-08 17:39:50 · 1448 阅读 · 0 评论 -
hdu4417Super Mario(线段树+离线处理)
->题目请戳这里题目大意:一个长为n的路,每个整点处有高度为h的墙,现在超级玛丽要跳过这些墙去救公主。给m个询问,每个询问包含询问区间a-b以及玛丽的弹跳高度c,求对于每个询问,玛丽能跳过这个区间多少墙。题目分析:简单的说就是求给定区间不大于c的墙的个数。对区间处理很容易想到线段树,但是线段树貌似没有查询区间小于某个数的个数的功能,又像划分树,但是划分树求的是区间第k大值。所以我们换一下思原创 2013-06-08 19:49:29 · 1327 阅读 · 0 评论 -
hdu3954Level up(线段树成段更新)
->题目请戳这里突然传来噩耗,所以期末考试提前一周。。。欲哭无泪。。。题目大意:有n个英雄一字排开,编号1-n,现在有一些怪兽,一波一波的,每次袭击l-r的英雄,当然我们的英雄总能打败怪兽,并获得相应的经验值,获得的经验值= 英雄当前等级*升级因子e,e每次输入给定,经验值累计到一定程度就会升级,总级别k题目分析:线段树。不过这题线段树不是那么容易的,TLE了整个下午。。。首先想到的是原创 2013-06-20 20:40:04 · 967 阅读 · 0 评论 -
poj2201Cartesian Tree(笛卡尔树)
Cartesian TreeTime Limit: 10000MS Memory Limit: 65536KTotal Submissions: 2950 Accepted: 1122Case Time Limit: 2000MSDescriptionLet us consider a special type原创 2013-07-14 22:00:53 · 1477 阅读 · 0 评论 -
POJ3740Easy Finding(DLX入门)
->题目请戳这里题目大意:给一个m*n的01矩阵,求是否存在若干行,使这些行中的1覆盖所有的列恰好1次。题目分析:裸的精确覆盖题目,建图+模版= AC。需要用到dance links这种数据结构优化。dancing links也是最近才学,今天刚弄明白,这此特别感谢yyd大牛,帮我解决了一个小瓶颈。关于dancing links,仔细研究才能发现dancing lingks是如此绝妙的原创 2013-05-31 23:12:33 · 997 阅读 · 0 评论 -
hdu1251统计难题(字典树小试牛刀)
->题目猛戳这里题目大意:略题目分析:建棵字典树就ok,详情请见代码:#include #include#include#includeusing namespace std;char s[20];typedef struct node{ struct node *next[26]; int num;}tree;void init(tree *t)原创 2013-05-14 20:01:20 · 739 阅读 · 0 评论 -
杭电2072 单词数(Trie tree或者STL)
->题目请戳这里题目大意:中文题,不解释。题目分析:字典树水过~详情请见代码:#include #include#include#include#include#include#includeusing namespace std;typedef struct node{ struct node *next[26]; int end;}tree原创 2013-05-14 22:26:52 · 869 阅读 · 0 评论