数据结构
文章平均质量分 75
saucyJack
外科
展开
-
POJ 2388(快排)
题目链接:http://poj.org/problem?id=2388其实这题是个水题,sort()就能过,但是为了练习,写了一个快速排序..然后..居然还超时了..#include#include#include#include#include#includeusing namespace std;const int INF=0x3f3f3f3f;const i原创 2016-01-25 17:49:23 · 461 阅读 · 0 评论 -
[Hnoi2002]营业额统计(SBT模版题)
题目链接http://begin.lydsy.com/JudgeOnline/problem.php?id=2929记录一下SBT的模版...(Ps:题目有坑!)#include #include #include #include #include #include using namespace std;typedef long long ll;c原创 2016-07-22 23:23:47 · 288 阅读 · 0 评论 -
size balance tree 的基本操作
(参考2007国家集训队论文 size balance tree -陈启峰)此处附上SBT中文版讲解传送门:http://wenku.baidu.com/view/364afa42a8956bec0975e3b1.html原创 2016-05-07 12:43:57 · 1292 阅读 · 0 评论 -
Pku1200 Crazy Search(Rabin Karp)
题意:先给两个整数n和nc,然后给出一个字符串,问有多少种不同的长度为n的子串,nc为字符串中不同的字符数。思路:数据范围比较大,用哈希的方式可以解决。采用Rabin karp字符串匹配设计哈希函数即可。以下有关Rabin karp的讲解转载自:http://blog.csdn.net/touzani/article/details/1632149字符串匹配(S原创 2016-04-19 19:15:57 · 985 阅读 · 0 评论 -
Vijos1083 小白逛公园(线段树+动态规划)
题意:给出一个序列,每次操作修改一个数值或者查询一个区间内最大连续子序列的和。思路:求和部分利用分治就好了,但是在求区间和的时候注意考虑,如果同时向左向右查询,最后结果不一定是左右相加,这里要特殊处理一下。关于线段树的姿势,用结构体会比较好处理。#include using namespace std;#define lson rt<<1,l,mid#define rson r原创 2016-05-26 23:54:07 · 533 阅读 · 0 评论 -
Vijos 1448校门外的树(线段树)
传送门:https://vijos.org/p/1448题意:查询一个区间内被修改的次数。思路:线段树单点更新,区间查询。利用括号序列的方法,更新区间[a,b]时,点a记录左括号数,点b记录右括号数,查询区间[a,b]时,即为b之前(包括b)的左括号数-a之前的右括号数。#include using namespace std;#define lson rt<<1,l,mid原创 2016-05-25 17:53:56 · 1143 阅读 · 0 评论 -
数据结构--区间一类问题(待更新...)
①HDU 3887:查找节点后继中权值小于该节点权值的节点个数思路:dfs序+线段树or树状数组。先dfs序记录每个节点对应的区间,然后线段树记录节点权值之和,从大到小开始找,因为权值大的节点删除后对后续查询没有影响。#include#include#include#include#include#include#include#include#include#inclu原创 2016-05-22 23:50:13 · 948 阅读 · 0 评论 -
poj 3321 Apple Tree(dfs序+线段树)
题意:给出一个多叉树(不一定是二叉),每个树上有一个苹果,有n-1条边,m次操作操作有两种:一:每次操作使该节点的苹果从有到无或从无到有,每个节点最多有一个苹果二:查询该节点的子树上共有多少个苹果思路:先用dfs序给所有节点标号(相当于映射成线性的),然后用线段树维护,单点更新和区间查询。#include #include #include #include #原创 2016-04-28 10:50:49 · 243 阅读 · 0 评论 -
哈希表算法
(以下部分内容转自百度百科:点击打开链接)散列表(Hash table,也叫哈希表),是根据关键码值(Key value)而直接进行访问的数据结构。也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。这个映射函数叫做散列函数,存放记录的数组叫做散列表。给定表M,存在函数f(key),对任意给定的关键字值key,代入函数后若能得到包含该关键字的记录在表中的地址,则称表M原创 2016-02-01 10:52:15 · 363 阅读 · 0 评论 -
hdu 5700 区间交 (线段树+枚举)
传送门:http://acm.hdu.edu.cn/showproblem.php?pid=5700题意:给定序列a1,a2...an以及m个区间,从m个区间中选出k个区间使k个区间相交的部分和最大。思路:预处理前缀和。按照r从小到大l从大到小的顺序将所有区间排序,用线段树维护区间第k小。然后枚举区间的右端点,求出当前第k小左端点,然后计算差值即可。#include原创 2016-07-23 23:03:22 · 285 阅读 · 0 评论 -
HUSTOJ 2867: 火车票(线段树)
题目链接http://begin.lydsy.com/JudgeOnline/problem.php?id=2867(sb没读看清题wa了一下午...)线段树区间更新区间查询问题,需要lazy优化一下。这道题需要判断请求是否能被满足,即涉及到线段状态的询问。当要求被满足的时候要减去相应线段上的座位数,因此涉及到线段的动态修改。用 seat 这个域来记录线段[a,b]上的座位原创 2016-07-16 17:02:57 · 546 阅读 · 0 评论 -
hdu 5726 GCD(2016 Multi-University Training Contest 1线段树)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5726题意:给出一组序列a1,a2...an,Q次询问,每次给出l,r ,求出所有满足gcd(l,l+1,...,r)=gcd(l',l+1',...r')的区间个数。线段树区间查询问题。利用线段树在logn时间复杂度内求出所有gcd[l,r]的值,并保存在数组里,最后做离线处理原创 2016-07-19 19:31:05 · 258 阅读 · 0 评论 -
poj 2104K-th Number(划分树)
题目链接http://begin.lydsy.com/JudgeOnline/problem.php?id=2879:http://poj.org/problem?id=2104(一个模版题吧...)参考网上的代码照着敲了一遍差不多就理解了...附上代码:#include#include#include#include#include#include#inclu原创 2016-07-18 23:31:43 · 171 阅读 · 0 评论 -
[Usaco2008 Feb]hotel旅馆(线段树)
题目链接http://begin.lydsy.com/JudgeOnline/problem.php?id=2879线段树区间更新,区间查询问题。维护以下四个域:sum:该区间所有位置shulmx:该区间从左端点开始最大连续的空闲位置数rmx:该区间从右端点开始最大连续的空闲位置数mx:该区间最大连续的空闲位置数显然,递归部分为:mx[rt]=maxt(mx原创 2016-07-17 17:05:09 · 250 阅读 · 0 评论 -
[Usaco2003 Open]Lost Cows(线段树)
题目链接:http://begin.lydsy.com/JudgeOnline/problem.php?id=2875类似于poj上的一道题,具体记不得了。算是线段树的一道基础题吧,单点更新问题。sum[rt]记录前面所有的空闲位置的数目sum[rt]=sum[rt从后往前进行插入,每次插入之后记录插入的位置,并做一个标记,第一个数应该为最终未标记的那个数,然后原创 2016-07-16 21:50:38 · 458 阅读 · 0 评论 -
hdu 5475 An easy problem (线段树)
传送门http://acm.hdu.edu.cn/showproblem.php?pid=5475题意:给定一个x,初值为1有以下两种操作:1、乘以k2、除以第k次操作的所乘的值线段树单点更新问题,查询的时候只需要输出v[1]的值即可。具体看下代码就好了。另外,这题xjb暴力可以卡时过掉,亲测。(其实本来并不想写这个题解,这题真的是An easy原创 2016-07-24 22:27:40 · 308 阅读 · 0 评论 -
[tyvj1432] 楼兰图腾(线段树)
传送门http://begin.lydsy.com/JudgeOnline/problem.php?id=2895题意(题目有点乱):在完成了打鼹鼠之后,西部314来到了楼兰古城的西部。相传很久以前这片土地上(比楼兰古城还早)生活着两个部落,一个部落崇拜尖刀(‘V’),一个部落崇拜铁锹(‘∧’),他们分别用V和∧的形状来代表各自部落的图腾。西部314在楼兰古城的下面原创 2016-07-24 17:16:12 · 1373 阅读 · 0 评论 -
Codeforces Round #343 (Div. 2) D. Babaei and Birthday Cake(线段树+dp)
官方题解:首先,我们计算每个蛋糕的体积: vi=π∗hi∗r2i现在,考虑序列 v1,v2,v3,…,vn :问题的答案是这个序列中递增子序列的最大和。我们怎么样解决它?首先去掉小数,我们可以定义一个新的数组 a1,a2,a3,…,an,ai=vi/π=hi∗r2i们考虑 dpi是以 ai结束的序列和的最大值且 dpi=max(ai,maxj这个问题的答案就是: π∗m原创 2016-03-02 22:56:52 · 361 阅读 · 0 评论 -
HDU 4288 Coder(线段树+离线处理)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4288维护一个序列an,有以下三种操作:一、在序列中添加元素x二、在序列中删除元素x三、计算序列中下标i%5=3的元素和在写解题报告之前先废话几句关于线段树的姿势问题:之前一直习惯于结构体姿势的线段树,后来看了notonlysuccess的线段树总结,开始采用数组原创 2016-07-13 16:27:37 · 1051 阅读 · 0 评论 -
POJ 1840(哈希)
题目链接:http://poj.org/problem?id=1840看到这道题第一感觉是很熟悉,想起hdu上的一道题。不过不同的是,这道题如果采用相同方法去做,数组要开始6kw,需要用short开,应该是数据不强吧。另外,这道题map还可以过。#include#include#include#include#include#includeusing namespace原创 2016-01-26 20:48:15 · 263 阅读 · 0 评论 -
POJ 2503(哈希)
题目链接:http://poj.org/problem?id=2503题意:给出多行字符串,每行两个, 表示右边映射到左边,然后给出多行字符串,查找是否存在映射。思路:直接拿map水了一发,题目应该是考察字符串的哈希,感觉还可以字典树来做。不过这道题输入略显费劲.....#include#include#include#include#include#include原创 2016-01-26 21:10:46 · 220 阅读 · 0 评论 -
poj 2492 A Bug's Life(带权并查集)
题目链接:http://poj.org/problem?id=2492用 0 1表示两种性别用sum[i]表示节点i到根节点的距离,f[i]记录i的根节点。f[rb]=ra;带权路径压缩:sum[rb]=(sum[a]-sum[b]+1)%2;#include#include#include#include#includeusing nam原创 2016-02-09 14:18:34 · 239 阅读 · 0 评论 -
poj 2406 Power Strings(KMP || 暴力)
题目链接:http://poj.org/problem?id=2406没想到这道题暴力都能过,而且只有188ms。。。①kmp:②暴力(188ms):#include#include#include#include#includeusing namespace std;const int INF=0x3f3f3f3f;const int maxn=1000010原创 2016-02-09 21:37:29 · 231 阅读 · 0 评论 -
poj 2886 Who Gets the Most Candies?(线段树+反素数)
#include#include#include#include#includeusing namespace std;const int INF=0x3f3f3f3f;const int maxn=500010;int T,n,k;int a[maxn],loc;char name[maxn][15];int antiPrime[]={1,2,4,6,12,24,36,原创 2016-02-10 12:00:15 · 207 阅读 · 0 评论 -
poj 2750 Potted Flower(线段树+动态规划)
题目链接:http://poj.org/problem?id=2750(思考了很久也没做出来,最终还是默默去看了题解....)思路:sum:表示区间的和maxNum:表示区间最大值minNum:表示区间最小值lmax:表示从区间左端开始的连续最大子序列rmax:表示从区间右端开始的连续最大子序列lmin:表示从区间左端开始的连续最小子序列rmin:表示从区间原创 2016-02-11 11:03:17 · 352 阅读 · 0 评论 -
poj 1151 Atlantis(线段树+离散化+扫描线)
题目链接:http://poj.org/problem?id=1151折腾了一下午的题...具体解释见代码注释。#include#include#include#include#includeusing namespace std;const int INF=0x3f3f3f3f;const int maxn=100005;int n,num;double y[ma原创 2016-02-29 17:24:24 · 263 阅读 · 0 评论 -
poj 1182 食物链(DSU)
①普通并查集:f[i]=i,表示i属于Af[i]=i+n,表示i属于Bf[i]=i+2*n,表示i属于C每次合并之前先进行判断如果x和y属于同类,则需要判断(x,y+n)和(x,y+2*n)如果x吃y,则需要判断(x,y)和(x+2*n,y)②带权并查集:每次合并压缩路径的时候, 模三取余,然后判断权值即可附上普通并查集的代码:#includ原创 2016-03-07 08:58:00 · 258 阅读 · 0 评论 -
poj 3007 Organize Your Train part II(字符串哈希)
题目链接:http://poj.org/problem?id=3007题意:给出一个字符串,从任意一个地方切开,分成两个字符串s1,s2,然后分别反转成s3,s4,然后将四个字符串任意组合(子串及其反串不可组合),求出所有不同的组合数。如果用STL的话这题会超时,map什么的都用不了,就自己写了一个丑陋的哈希,设计的哈希函数也比较简单,47ms才过。#include#include原创 2016-02-05 14:11:24 · 1540 阅读 · 0 评论 -
POJ 3253(Huffman树求最小权值)
题目链接:http://poj.org/problem?id=3253题意:给出n个木棒长度,从无限长的木棒上锯断n-1次,每次锯断需要花费的代价为木棒的长度,求最小代价。思路:Huffman树求最小权值的问题,用优先队列可以很方便的解决这道题。#include#include#include#include#include#includeusing namespace s原创 2016-01-25 20:11:44 · 582 阅读 · 0 评论 -
poj 1703 Find them, Catch them(Dsu)
题目链接:http://poj.org/problem?id=1703用二维数组,第一维记录元素i(f[i][0]),第二维记录与i不在同一集合的元素j(f[i][1])。初始化f[i][0]=i,f[i][1]=0(表示没有元素);每次操作时,合并f[a][0]和f[b][1],f[a][1]和f[b][0]。#include#include#include#include原创 2016-02-09 12:12:37 · 195 阅读 · 0 评论 -
poj 3264 Balanced Lineup(RMQ && 线段树)
题目链接:http://poj.org/problem?id=3264题意:求出一个给定的区间的最大差值。很典型的RMQ问题,也可以用线段树做。①RMQ:②线段树(1735ms):#include#include#include#includeusing namespace std;const int INF=0x3f3f3f3f;const原创 2016-02-08 21:48:57 · 261 阅读 · 0 评论 -
POJ 3349 (哈希)
题目链接:http://poj.org/problem?id=3349题意:给出n个雪花,判断是否存在两个雪花相似。这道题数据有点问题,不考虑同构就可以过比如这组数据:21 2 3 4 5 63 1 2 4 5 6我也是后来看到discuss才发现的。另外还要考虑到顺时针的逆时针的问题,一片雪花应该有12中序列表示方式。后来参考discuss的代码做了修改。正确原创 2016-01-26 11:50:55 · 512 阅读 · 0 评论 -
POJ 1035(字符串模拟)
题目链接:http://poj.org/problem?id=1035题意:给出一个字典,然后给出一些单词,问能否通过一下变换在字典中找到该单词:①替换一个字符②删除一个字符③插入一个字符若该单词已在字典中,则不需要变化。若无法通过变换找到该单词,则不需要输出。思路:模拟吧,数据不是很大,但是一定要想清楚再去写代码,模拟题是硬伤。#include#includ原创 2016-01-25 14:49:33 · 534 阅读 · 0 评论 -
POJ 2513(Trie+Hash+Dsu)
题目链接:http://poj.org/problem?id=2513这道题存在空数据的情况,也是无语了。建立字典树,然后哈希,给所有字符串编号,最后用并查集判断是否存在欧拉回路。#include#include#include#include#include#includeusing namespace std;const int INF=0x3f3f3f3f;co原创 2016-01-25 15:52:56 · 325 阅读 · 0 评论 -
POJ 1936(字符串匹配)
题目链接:http://poj.org/problem?id=1936#include#include#include#include#include#includeusing namespace std;const int INF=0x3f3f3f3f;const int maxn=100010;char s[maxn],t[maxn];int main(){#if原创 2016-01-25 22:58:42 · 442 阅读 · 0 评论 -
POJ 3080 (字符串匹配)
题目链接:http://poj.org/problem?id=3080题意:给出n个字符串,找出其最长公共子串,若子串长度>3,则输出最长公共子串,否则输出...本来以为要用到kmp或者后缀数组什么的,思考了很久没有思路,看了一下discuss,发现可以暴力过,而且0ms,也是醉了...#include#include#include#include#include#incl原创 2016-01-25 23:57:38 · 317 阅读 · 0 评论 -
poj 2528 Mayor's posters(线段树+离散化)
题目链接:http://poj.org/problem?id=2528(RE了不知道多少发,又接连WA了好几发..Debug了一下午...)题意:在墙上贴海报,每个人都可以贴一张海报,长度不限,海报之间可以相互覆盖,问最后能看到多少张海报(不一定是全部看见)。这道题的数据范围很大,用线段树不可能把所有建立那么多节点,可以把区间当成点,离散化优化空间。在区间离散化的时候不原创 2016-02-06 18:09:09 · 188 阅读 · 0 评论 -
poj 2828 Buy Tickets(线段树)
题目链接:http://poj.org/problem?id=2828线段树单点更新问题。从后往前插入,因为最后一个插入某位置的数是确定的。之后每个节点用sum记录该区间的空位置数,如果左区间空位置数比要插入位置大,更新左区间,否则更新右区间,并且pos要减去左区间空位置数。(感觉想到这一点就会比较容易,否则有一种无从下手的感觉。。。)#include#include#原创 2016-02-06 22:08:30 · 181 阅读 · 0 评论 -
poj 2777 Count Color(线段树+lazy优化+位运算)
题目链接:http://poj.org/problem?id=2777读完题观察一下数据范围,因为之前做过hdu上一道类似的线段树+lazy优化的题目,所以很容易想到lazy,不过最后还是超时了,在Query操作中遍需要历到所有的节点,这样的做法会超时,还是需要继续用lazy优化,加上位运算是为了统计颜色数。具体解释一下位运算的部分:因为T的大小只有30,每个颜色用2^C表示,最多2^30原创 2016-02-08 19:11:16 · 271 阅读 · 0 评论 -
poj 2985 The k-th Largest Group(线段树+并查集)
题目链接http://poj.org/problem?id=2985题意:有N只猫,刚开始每只猫各自在不同的集合,现在给出M个操作,有两种操作: 1.把第i只猫和第j只猫所在集合合并。 2.查找第i大的集合内有多少只猫。思路:操作一,集合合并很容易想到并查集。操作二,如果每次合并之后进行查找直接遍历一遍,效率O(n^2),很容易超时。所以可以考虑原创 2016-07-20 20:48:05 · 263 阅读 · 0 评论