
数据结构
文章平均质量分 78
paradiserparadiser
中国地质大学(北京)CS专业......ACM/ICPC酱油一瓶
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
BNU 12680 Jupiter Atacks! (线段树)
题意:给定一个区间,,两种操作,一种是将x的值赋为y,另一种为询问区间(x,y)的sum值,此处sum值的运算为:H(fi,..., fj) = Bkfj-k ( mod P)例如: H(f2,..., f5) = B^0 * f5 + B^1 * f4 + B^2 * f3 + B^3 * f2 ( mod P) 这题隐藏的好深~~~ 用线段树的话,用va域存储原创 2013-09-28 00:46:39 · 1281 阅读 · 0 评论 -
HDU 4417 Super Mario (树状数组+离线处理)(划分树+二分答案)
题意: 给定1--n区间,有q个询问,询问l,r,k表示区间[l,r]小于等于k的数的个数思路: 可以用划分树(求区间第k大值)变形一下,来求小于等于k的个数,但是此题直接离线处理询问高效的多。首先将1--n区间的值记录位置,从小到大排序,每个询问按照k值从小到大排序,然后从小到大开始,根据查询的H,将满足条件的的点插入,计数+1,然后就是求区间和。#include #inc原创 2013-09-05 18:23:10 · 1062 阅读 · 0 评论 -
HDU 2825 Wireless Password(AC自动机+状压DP)
题意:有一个长为n(n构造AC自动机进行搜索,dp【i】【j】【k】表示字符串长度为i,匹配字典树上的第j个节点,并且已经匹配上k个magic word时的总数。则转移方程为 (dp【i+1】【j的儿子】【k | j的儿子的状态】 += dp【i】【j】【k】) % mod;需要注意的是,因为单词可以重复使用,所以单词结尾的fail 指向root 指向的各节点#incl原创 2013-08-30 16:15:24 · 797 阅读 · 0 评论 -
HDU 2222 Keywords Search(AC自动机模板题)
学习AC自动机请戳这里:大神blog........自动机的模板:#include #include #include #include #include #include #include #include #include #include #include #include //形如INT_MAX一类的#define MAX 100005#define IN原创 2013-07-31 19:20:51 · 910 阅读 · 0 评论 -
POJ 1743 Musical Theme(后缀数组)
题意:有n个数值,算出相邻两个值的差值,此时有n-1个值的序列,把这序列当做字符串的话,求最长重复子串,且这两个子串不能重叠。分析:后缀数组解决。先二分答案,把题目变成判定性问题:判断是否存在两个长度为k 的子串是相同的,且不重叠。只能说后缀数组很强大PS:刚好是男人八题之一..........8分之1男人了.......#include #include #include原创 2013-08-16 15:36:38 · 643 阅读 · 0 评论 -
POJ 2774 Long Long Message (后缀数组模板)
借用罗大神的模板,开始搞后缀数组#include #include #include #include using namespace std;#define N 222222/****后缀数组模版****/#define F(x)((x)/3+((x)%3==1?0:tb)) //F(x)求出原字符串的suffix(x)在新的字符串中的起始位置#define G(x)((x)原创 2013-08-16 13:53:43 · 919 阅读 · 0 评论 -
POJ 3261 Milk Patterns(后缀数组+二分答案+离散化)
题意:给定一个字符串,求至少出现k 次的最长重复子串,这k 个子串可以重叠。分析:经典的后缀数组求解题:先二分答案,然后将后缀分成若干组。这里要判断的是有没有一个组的符合要求的后缀个数(height[i] >= mid)不小于k。如果有,那么存在k 个相同的子串满足条件,否则不存在。#include #include #include #include using namesp原创 2013-08-16 16:30:16 · 973 阅读 · 0 评论 -
POJ 3321 Apple Tree (DFS + 树状数组)
题意:一棵苹果树有N个分叉,编号1---N(根的编号为1),每个分叉只能有一颗苹果或者没有苹果。 现在有两种操作:1.某个分叉上的苹果从有变无或者从无边有。2.需要统计以某个分叉为根节点时,它的子树上(包括该分叉)共有多少苹果。分析: 有两种操作,基本就是使用数据结构维护的题目了。开始想了很久,不懂如何将分叉转化为一维线性的树状数组维护。 看了下discuss,有人说了时间原创 2013-08-27 14:05:17 · 815 阅读 · 0 评论 -
POJ 1195 Mobile phones (二维树状数组或线段树)
偶然发现这题还没A掉............速速解决了.............树状数组和线段树比较下,线段树是在是太冗余了,以后能用树状数组还是尽量用.........#include #include #include #include #include #include #include #include #include #include #includ原创 2013-08-26 16:26:44 · 922 阅读 · 0 评论 -
POJ 2155 Matrix (二维树状数组)
题意:提供一个N*N 的矩阵,其中每一个格子中的数不是1 就是0,初始时每一个格子的值为0,我们可以修改这个矩阵中的数字,每次给出矩阵的左上角坐标(x1,y1),以及右下角的坐标(x2, y2),并且将矩阵中的数字全部取反(原来是1 现在变成0,原来是0 现在变成1),还可以每次查询第x 行第y 列的格子中的数字是什么。分析:此题是一般树状数组题目的倒转思维,一般会单点更新,区原创 2013-08-26 19:40:45 · 823 阅读 · 0 评论 -
HDU 4578 Transformation (线段树)
本来是很裸的线段树,但是如果用lazy操作,情况太多了,很烦躁。需要考虑先加后乘和先乘后加的不同处理。更新sum值时,考虑对一个区间内的数加上一个数c后对这三个值有什么影响。首先考虑一个数c的情况。一次方就不说了直接加上c*区间长度len就行了。二次方。一个数开始为a。后来为a+c。则平方后为a*a+2*a*c+c*c。比原来多了2*a*c+c*c。而对于整个区间增加2*sum[1]*原创 2013-08-14 10:43:21 · 836 阅读 · 0 评论 -
POJ 2761 Feed the dogs (SBT+离线处理询问)
给定n个数,m次询问,n个数为1--n的排列,每次询问给出了一个区间和k,询问在区间内为第k小的数。区间内第k小(大)的数可以用SBT来解决,现在m次询问则是动态的,可以用离线处理:将询问区间排序,每次需要插入则插入,需要删除则删除,节省很多时间.......#include #include #include #include #include #include原创 2013-08-23 22:47:04 · 1010 阅读 · 0 评论 -
SBT 模板
贴一发SBT的模板............慢慢熟悉学习请戳这:http://blog.youkuaiyun.com/acceptedxukai/article/details/6921334#include #include #include #include #include #include #include #include #include #include #in原创 2013-08-23 21:26:11 · 1309 阅读 · 0 评论 -
HDU 3478 Play with Chain (Splay树)
这种高级数据结构太难搞了.........现在还是先照着别人的代码敲,做模板..........慢慢花时间来弄懂#include #include #include #include #include #include #include #include #include #include #include #include //形如INT_MAX一类的#def原创 2013-08-30 21:24:51 · 868 阅读 · 0 评论 -
HDU 3473 Minimum Sum (划分树)
题意:给定一个数组,有Q次的询问,每次询问的格式为(l,r),表示求区间中一个数x,使得sum = sigma|x - xi|最小(i在[l,r]之间),输出最小的sum。思路:本题一定是要O(nlogn)或更低复杂度的算法。首先很容易得出这个x的值一定是区间(l,r)的中位数的取值,排序之后,也就是假设区间(l,r)长度为len ,则中位数就是该区间的第(r - l) / 2 - 1小的原创 2013-09-06 15:30:06 · 930 阅读 · 0 评论 -
BNU 12674 Diccionário Portuñol (字典树统计)
题意:给定两本字典,每本字典最多1000个单词,每个单词最多1000长度,每本字典的总长度最多10^5长度。现在希望取第一本字典的单词的所有前缀(非空),和第二本字典单词的所有后缀(非空),组成一个新的单词。求出能组成的新单词总数。分析: 统计第一本字典单词的所有不同前缀数s1,第二本单词不同后缀数s2,理想状态下总单词为s1 * s2, 但是前缀和后缀组合起来,可能会重复产生相同原创 2013-09-27 21:58:51 · 2983 阅读 · 2 评论 -
POJ 4047 Garden (线段树)
题意:输入N,M,K。有N个点,每个点有一个值,然后有M个操作 0 x y 表示将x的值赋为y; 1 x y 表示将x和y互换下位置(相应值也互换) ; 2 x y 表示询问[x,y]内连续K个数和的最大值。一开始想用每个点来建树,发现不好维护区间内连续K个数的和的最大值。但如果转化一下,因为K是定值,将[x,x+k-1]区间的和看做一个点,这样以连续K个数和作为点,共有N-K+原创 2013-10-06 20:49:00 · 987 阅读 · 0 评论 -
HDU 4302 Holedox Eating (二分+树状数组维护)
题意:一个小孩吃蛋糕,他的起始点在0位置,现在有m个操作,0 x 代表在x位置出现一个蛋糕; 1 代表小孩要去离他最近的点吃蛋糕,如果与他距离最小的点有两个,则去与他上次走的方向相同的点; 如果没有蛋糕,他就不动。 询问m次操作过后,小孩走了多少距离。每一次,用二分判断,他右边离他最近的蛋糕点,和左边离他最近的蛋糕点。如何判断呢,只需用树状数组维护蛋糕总数,判断小孩当前位置pos 与原创 2013-10-05 20:59:48 · 918 阅读 · 0 评论 -
POJ 3468 A Simple Problem with Integers(线段树基础)
多写写.......多熟悉需要注意的是记录sum和lazy延时标识变量也要是64位整数,因为有乘法。#include #include #include #include #include #include #include #include #include #include #include #include //形如INT_MAX一类的#def原创 2013-07-19 02:11:14 · 1248 阅读 · 0 评论 -
HDU 4325 Flowers (线段树+离散化)
去年多校的时候用最暴力的办法水过了,忽然看到,觉得还是得用正统的方式过了.............#include #include #include #include#include #include #include #include #include #include #include #include #include //形如INT_MAX一类的原创 2013-10-04 20:48:58 · 1019 阅读 · 0 评论 -
POJ 1185 炮兵阵地(状态压缩DP)
题意:由方格组成的矩阵,每个方格可以放大炮用P表示,不可以放大炮用H表示,求放最多的大炮,大炮与大炮间不会互相攻击。大炮的攻击范围为两个方格。分析:这次当前行的状态不仅和上一行有关,还和上上行有关,所以用三维dp【i】【j】【k】来表示第i行的状态为j,i-1行状态为k时最多的大炮。一开始看数据量为100 * 1024 * 1024 铁定要爆,但是由于大炮的攻击方式,单独看每一行最多只有几原创 2013-08-17 21:06:54 · 819 阅读 · 0 评论 -
POJ 3167 Cow Patterns (KMP + 树状数组)
题意:在长度为n的主串中,用长度为k的模式串匹配,找出所有匹配的起始位置。匹配机制不是相等,而是找出的子串满足与模式串相同的大小关系。例如样例:N:5 6 2 10 10 7 3 2 9 K:1 4 4 3 2 1。找出的子串为: 2 10 10 7 3 2,满足模式串中的任意i , j的大小关系。现在需要一种判别方式代替普通的相等判别,就能变成kmp做法了。用lee[i原创 2013-10-02 20:41:32 · 1811 阅读 · 0 评论 -
HDU 4046 Panda (树状数组)
题意:给定一个长度为5W的字符串,只包含字母w或者b,现在有1W个操作,0,l,r表示每次询问l,r区间内有多少连续的“wbw”; 1,i,c表示将第i个位置上的字符修改成字符c分析: 树状数组的单点更新:求区间内有多少连续的"wbw",可以找出所有的“wbw”,用三个数组pre,mid,suc分别标记好,第i个位置的字符能否作为前缀w,中间的b或者后缀w,字符b所在的位置值更新+1原创 2013-09-13 20:31:35 · 1001 阅读 · 0 评论 -
POJ 2104 & HDU 2665 K-th Number (划分树)
题意不用说了,就是询问x次,指定区间的第k小的值....................表示太弱了.......看了许久还是不太理解划分树内涵,先把偷来的模板留着#include #include #include #include#include #include #include #include #include #include #include #i原创 2013-09-05 22:43:01 · 1079 阅读 · 0 评论 -
POJ 2892 Tunnel Warfare (SBT + stack)
题意:给定了初始的状态:有n个村庄连成一条直线,现在有三种操作: 1.摧毁一个村庄 2.询问某个村庄,输出与该村庄相连的村庄数量(包括自己) 3.修复被摧毁的村庄,优先修复最近被摧毁的..............分析:用SBT做的话,摧毁村庄就插入,修复就移除,如果要询问的话:找到第一个大于等于该村庄编号和第一个小于等于该村庄编号的,找到了联通在一起的村庄。#include #i原创 2013-08-26 14:48:13 · 999 阅读 · 0 评论 -
POJ 2528 Mayor’s posters(离散化+成段更新)
题意:在墙上贴海报,海报可以互相覆盖,问最后可以看见几张海报思路:这题数据范围很大,直接搞超时+超内存,需要离散化+线段树此题re了N次,MAX越开越大,开始以为后台数据比实际范围大,其实是离散化+去重+加点后,MAX最多能到达3*MAX,然后建线段树最好要4*3*MAX大小。#include #include #include #include #include #incl原创 2013-07-22 12:38:55 · 987 阅读 · 0 评论 -
几道字典树题目
POJ 2418 Hardwood Species题意:给一些字符串,按照字典序输出他们,并且输出频率...........#include #include #include #include #include #include #include #include #include #include #include #include //形如INT_MAX原创 2013-08-30 22:36:14 · 1175 阅读 · 2 评论 -
POJ 3481 (SBT基础操作题)
题目有三个操作,插入一个优先级为p的,名字为k的人;取出优先级最小的人,输出名字; 取出优先级最大的人,输出名字。可以再sbt的域中加一个值存储名字,也可以直接map搞定....................这里只用了insert,getmin,getmax,remove或者del操作。#include #include #include #include #includ原创 2013-08-23 21:49:06 · 954 阅读 · 0 评论 -
POJ 2823 Sliding Window (RMQ + 滚动数组)
正常的RMQ询问区间的最大最小值问题,只是如果普通的开dp[i][j]的话,铁定超内存。题目中给定了询问的区间长度k所以,只需要用一位数组存dp[i]表示i到i+k-1区间的最值#include #include #include #include #include #include #include #include #include #include #in原创 2013-08-21 10:49:16 · 1307 阅读 · 2 评论 -
POJ 1151 && 1389 离散化求矩形面积的并
两个题目都是离散化的基本模型。解题思路:1、首先分离出所有的横坐标和纵坐标分别按升序存入数组X[ ]和Y[ ]中.2、 设数组XY[ ][ ].对于每个矩形(x1,y1)(x2,y2)确定i1,i2,j1,j2,使得,X[i1]>=x1,X[i2]y1,Y[i2]>=y2令XY[ i ][ j ] = 1 (i从[i1,i2),j从[j1,j2))3、统计面积:area+=XY[i][原创 2013-07-20 16:53:01 · 831 阅读 · 0 评论 -
POJ 3368 Frequent values(线段树)
这一个题目是求一个区间内重复数字的最大次数。这题有一个特点,数字是递增滴,相同的数字肯定是连续的。将相同的数字看做一个部分,hash保存每个数字属于哪个部分。对所有的部分建一颗二叉树,保存此区间内最大的重复数字的个数。 查询的时候分3中情况1 在同一个部分,直接 尾 - 头 + 1就是结果2 只差一个部分,分开算,在各个部分里面重复多少次,比较一下原创 2013-07-20 11:12:35 · 988 阅读 · 0 评论 -
Poj 3246 Balanced Lineup(线段树基础)
依旧是线段树基础题询问区间的最大值和最小值之差,只有询问,没有插入删除。继续理解基础线段树#include #include #include #include #include #include #include #include #include #include #include #include #include //形如INT_MAX一类的#de原创 2013-07-19 15:34:22 · 1011 阅读 · 0 评论 -
Poj 2777 Count Color(线段树基础)
又毁三观了.......虽然题目数据有坑:区间【a,b】可能会有a>b的情况,但是我一开始没有考虑它也能过。此外莫名其妙的TLE#include #include #include #include #include #include #include #include #include #include #include #include #include原创 2013-07-19 12:01:11 · 884 阅读 · 0 评论 -
hdu 1698 Just a Hook(线段树基础)
成段更新的线段树,加入了延时标记............线段树这种东西细节上的理解因人而异,还是要自己深入理解......慢慢来#include #include #include #include #include #include #include #include #include #include #include #include //形如INT_MAX一类原创 2013-07-19 00:14:53 · 1107 阅读 · 0 评论 -
hdu 1166 敌兵布阵(线段树基础题)
学习线段树~~~~~~~~~~~~要好好理解此题是单点更新的线段树,考虑基本的询问,更新。#include #include #include #include #include #include #include #include #include #include #include #include //形如INT_MAX一类的#define MAX 50005原创 2013-07-17 22:26:31 · 976 阅读 · 0 评论 -
hdu 1496 Equations (双重循环+hash查找)
一个四元二次方程,给出因子a,b,c,d,xi在【-100,100】之间但不等于零。求方程等于零时有多少种解。题目可以暴搞....但总是不和谐的。将a*x1*x1+b*x2*x2的的可能值枚举出来hash一下,然后c*x3*x3+d*x4*x4用hash来查找,计数值乘以16就行了(xi可正可负)#include #include #include #include #incl原创 2013-07-15 11:13:56 · 1072 阅读 · 0 评论 -
priority_queue的用法
priority_queue的用法priority_queue调用 STL里面的 make_heap(), pop_heap(), push_heap() 算法实现,也算是堆的另外一种形式。先写一个用 STL 里面堆算法实现的与真正的STL里面的 priority_queue用法相似的priority_queue, 以加深对 priority_queue 的理解?转载 2013-07-11 11:13:57 · 646 阅读 · 0 评论 -
Poj 2001 Shortest Prefix(字典树模板)
字典树入门题......只需在对应结点记录num值,找到num为1时的前缀,是唯一前缀(只是该单词的前缀),或者一直找找到该单词结尾。#include #include #include #include #include #include #include #include #include #include #include #include //形如IN原创 2013-05-14 21:44:50 · 877 阅读 · 0 评论 -
hdu 4302 Holedox Eating
优先队列做法:用两个优先队列维护信息,蛋糕大于他当前所在位置的,用从小到大的优先级;蛋糕小于等于他当前所在位置,用从大到小的优先级。两个队列取出的元素再进行比较#include #include #include using namespace std;struct cmp{ bool operator () (int x,int y) { retur原创 2013-05-21 20:28:40 · 855 阅读 · 0 评论 -
Poj 1611 The Suspects
The SuspectsTime Limit: 1000MS Memory Limit: 20000KTotal Submissions: 16690 Accepted: 8015DescriptionSevere acute respiratory syndrome (SARS), an atypical pneum原创 2013-01-26 20:36:45 · 575 阅读 · 0 评论