—数据结构
文章平均质量分 88
MissZhou要努力
不晓日月,不辩兰艾,终日碌碌,安与燕雀相随乎
展开
-
hdu3183A Magic Lamp【RMQ】
今天开始为期2天的RMQ,争取能做上6-7题,本来也不是多大的知识点。其实第一场网络赛的之前就知道这个算法,dp的logn求静态区间最大最小值的巧妙算法,只不过这个题改成了要你算下标了。还是没有理解好ST算法的本质,导致TLE了两次后才幡然悔悟借鉴苟神博客才A掉。自己最开始还自以为是的觉得每次查询出来当前的最值然后改成0就可以了,那还和线段树有什么两样??居然没有想到,第几次找的最值和数组的下原创 2016-01-19 10:31:09 · 462 阅读 · 0 评论 -
hdu1272小希的迷宫【并查集基础】
上次Gardon的迷宫城堡小希玩了很久(见Problem B),现在她也想设计一个迷宫让Gardon来走。但是她设计迷宫的思路不一样,首先她认为所有的通道都应该是双向连通的,就是说如果有一个通道连通了房间A和B,那么既可以通过它从房间A走到房间B,也可以通过它从房间B走到房间A,为了提高难度,小希希望任意两个房间有且仅有一条路径可以相通(除非走了回头路)。小希现在把她的设计图给你,让你帮忙判断她的原创 2015-10-09 08:46:03 · 659 阅读 · 0 评论 -
hdu3461Code Lock【并查集+快速幂】
Problem DescriptionA lock you use has a code system to be opened instead of a key. The lock contains a sequence of wheels. Each wheel has the 26 letters of the English alphabet 'a' through 'z', in o原创 2015-10-09 21:22:02 · 868 阅读 · 0 评论 -
poj3177Redundant Paths【构造双连通分量:并查集缩点 模板】
这个题就是问加几条边可以构成双连通分量,一开始图样图森破的以为只是求桥的个数就好,然而并非如此……构造双连通分量的加边数=(原图的叶节点数+1)/2 因为双连通分量需要成环嘛,原图已经是连着的了,所以只需要在另一侧再加一条边就成环啦~怎么判断哪里是叶结点呢?先用并查集缩点,把所有当前的双连通分量都缩到一起,然后就构成了只有桥的图,枚举每个桥,记录每个点的次数,每次加一。只有1的点就是原图原创 2015-11-20 10:12:27 · 1215 阅读 · 0 评论 -
hdu2586How far away ?【LCA tarjan求最短距离】
这个题比普通的LCA只多了一个求距离,然后就把我华丽丽的困住了==当然了,我用的LCA是离线版的并查集那种模板是邝斌的那种,LCA 不难理解,就是dfs树+并查集 ,但是距离加在哪里??机智如我想到了在递归的时候求~然而写进去还找错位置了,原因在于应该写成dis[v]=dis[u]+edge[i].len;而不是dis[v]+=edge[i].len;然后就是距离的求法dis[u] +原创 2015-11-25 21:39:27 · 1172 阅读 · 0 评论 -
poj3237tree【树链剖分入门题+线段树】
休息了两天,今天开始做树链剖分,除了模板长以外,还是挺好理解的。就只是线段树+剖分独特的函数,然后树链剖分所用的数组有点多,没了。其中需要注意的一个点是“链”(路径)不一定是从根节点到叶子节点的,轻儿子这个点它也有重儿子啊啊啊。再说这个题,单点更新,区间取相反数,区间求最大值。/***********poj32372015.1.232504K 657MS C++ 6396B****原创 2016-01-23 17:20:15 · 1522 阅读 · 0 评论 -
poj2104&&hdu2665kth number【主席树入门题+讲解】
又是卡了一天的知识点,(其实是看不下去下午上网来着,(⊙﹏⊙)b)昨天差点找人问带有懒惰标记的线段树和主席树的区别与联系,多亏憋住了……主席树里面存储的某数字出现的次数,而线段树大多数储存数值,也不好说谁好谁不好,毕竟前者主要处理区间内与个数有关系的问题,比如说区间第k小、区间内不重复数字个数等等,这些线段树都做不了,据说修改主席树时要用树状数组,那不就成了树套树?omg 说几个孙大神的课原创 2016-01-24 21:16:50 · 1028 阅读 · 2 评论 -
poj3481double queue【treap树入门题】
9月份那会工大的大神过来讲课,像是被催眠似的昏睡了大半节课,拖延症晚期患者终于下决心要开始重新学习平衡树。不看不知道,一看吓一跳。原来treap树、splay树都是平衡树==我还在假期学习计划里面分开列了==丢人丢大发了orz 而treap树就是堆树,利用大根堆或者小根堆的性质以及随机给出的优先级建的树,实在是忘得太狠了==由于本人实在不喜欢一堆指针的模板,于是乎在网上找了这个:点击打开链接 而且原创 2016-01-26 15:58:55 · 967 阅读 · 0 评论 -
poj3580supermemo【splay】
DescriptionYour friend, Jackson is invited to a TV show called SuperMemo in which the participant is told to play a memorizing game. At first, the host tells the participant a sequence of numb原创 2016-04-24 11:13:16 · 559 阅读 · 0 评论 -
hdu3487Play with Chain【splay】
两种操作:1.减下来一段按顺序贴到某点前面 :就是木板上delete函数和insert函数和在一起了2.反转区间原创 2016-04-24 11:01:04 · 690 阅读 · 0 评论 -
1036: [ZJOI2008]树的统计Count 【树链剖分】【点权:单点更新区间求值】
SubmitStatusDescription 一棵树上有n个节点,编号分别为1到n,每个节点都有一个权值w。我们将以下面的形式来要求你对这棵树完成一些操作: I. CHANGE u t : 把结点u的权值改为t II. QMAX u v: 询问从点u到点v的路径上的节点的最大权值 III. QSUM u v: 询问从点u到点v的路径上的节点的权值和 注意:从点u到点原创 2016-05-28 16:40:52 · 360 阅读 · 0 评论 -
hdu5606 bestcoder#68 div2tree【并查集】
tree Accepts: 152 Submissions: 697 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)问题描述有一个树(nn个点, n-1n−1条边的联通图),点标号从11~nn,树的边权是00或11.求离每个点最原创 2016-01-02 20:31:17 · 591 阅读 · 0 评论 -
poj1442blacks boxs【treap树】
1A~果然上午看小说,中午吃好吃的,下午效率高23333说题意,有两种操作 add和query,query每次查询的是第i小的,i是从0开始的,查询之前i++,查询之后不删除。告诉你add数字的依次次序,又告诉你当数组当前有几个数的时候进行了一次查询(这句话我结合示例看了好久才明白什么意思)然后就是小case了/*************poj14422016.1.26984K 20原创 2016-01-26 17:03:42 · 842 阅读 · 0 评论 -
hdu1394Minimum Inversion Number逆序数
链接在这里呀在这里其实第一次看到这个题是六月1号。然而即使学长讲了一遍没懂依旧没问 好歹今天一下午终于明白了一串数字要怎么联想到线段树呢?把数字本身当作线段树中的位置--这个是这题的一个点Tip2:由于操作只有把开头的一个元素放到最后位置,故,其他数字相对位置不变啊。每次更新的数字就是从开始累加的==Tip3:n-1-2*a[i]咋来的?对于某个数a[i] 比他大的数有n-1-a[原创 2015-08-10 17:34:27 · 475 阅读 · 0 评论 -
poj3667hotal线段树【经典】
这个题又是把懒惰标记和动作状态混在一起了==还有push-up push-down 背了吧。。。 好怕怕…… 注意1和L!#include #include#includeusing namespace std;struct node{ int l,r,lsum,rsum,sum,loop;}tree[400000];int Find_Max(int a,int原创 2015-08-10 20:35:32 · 361 阅读 · 0 评论 -
数链剖分基础讲解
“在一棵树上进行路径的修改、求极值、求和”乍一看只要线段树就能轻松解决,实际上,仅凭线段树是不能搞定它的。我们需要用到一种貌似高级的复杂算法——树链剖分。 树链,就是树上的路径。剖分,就是把路径分类为重链和轻链。 记siz[v]表示以v为根的子树的节点数,dep[v]表示v的深度(根深度为1),top[v]表示v所在的重链的顶端节点,fa[v]表示v的父亲,son[v]表示转载 2015-10-02 19:54:57 · 583 阅读 · 0 评论 -
五张图带你体会堆算法
什么是堆堆(heap),是一类特殊的数据结构的统称。它通常被看作一棵树的数组对象。在队列中,调度程序反复提取队列中的第一个作业并运行,因为实际情况中某些时间较短的任务却可能需要等待很长时间才能开始执行,或者某些不短小、但很重要的作业,同样应当拥有优先权。而堆就是为了解决此类问题而设计的数据结构。二叉堆是一种特殊的堆,二叉堆是完全二叉树或者近似完全二叉树,二叉转载 2015-10-04 20:50:59 · 884 阅读 · 0 评论 -
2015长春网络赛hdu5444Elven Postman搜索二叉树
酱油的网络赛啊~工大大牛来上课才又做了下,然而还是改了n久 差点忘了orz#include #include#includeusing namespace std;#define N 1010int L[N],R[N],pre,root,t,q,n;void find_path(int x){ if(x>pre) { if(L[pre]==0)原创 2015-10-03 17:20:15 · 436 阅读 · 0 评论 -
hdu3486Interviewe【RMQ】附模板
找了半天都没找到太简单的==这个题面试n个人,可以分任意组数,每组选一个,得分总和严格大于k,问最少分几组一说最大最小的不看分类也知道是rmq,其实自己是想到用二分的,可是你为什么不自己试着写写呢??比赛的时候又不能确定思路再写,自己都WA多少遍还不知道思路对不对呢,这样不行啊。。。还有,标准二分的写法是不是得熟练一些啊。再有就是,这么大的数据量,多余的数组就彻底删了啊,MLE多少次不长记性=原创 2016-01-19 11:53:49 · 875 阅读 · 2 评论 -
poj3368&hdu1806Frequent values【RMQ求频率】
为什么非要改模板???简直就是挖坑自己跳T^T 最后还不是看了邝斌的标称才过的==,而且第一次有没审题,我确定我看到了“non-decreasing order.”然而为什么做的时候就忘了呢???还是就是二分啊啊啊啊/**************poj3368&hdu18062016.1.208808K 594MS C++ 1460B**************/#include原创 2016-01-20 17:36:32 · 445 阅读 · 0 评论 -
hdu2888Check Corners【二维RMQ】2009 Multi-University Training Contest 9 - Host by HIT
去年多校就出了一个裸的一维RMQ,怎么09年工大也出了啊,除了尽量少开内存,其他真的没什么,话说为毛多校的RMQ就这么简单,区域赛的就难的要死啊啊啊啊。刚刚看一个树型dp+RMQ+二分的200+行代码,本来还想自己研究出来呢 呵呵呵/***********hdu28882016.1.203260MS 30676K 1877B G++***********/#include #i原创 2016-01-20 19:05:01 · 439 阅读 · 0 评论 -
hdu1166敌兵布阵 线段树or树状数组
Problem DescriptionC国的死对头A国这段时间正在进行军事演习,所以C国间谍头子Derek和他手下Tidy又开始忙乎了。A国在海岸线沿直线布置了N个工兵营地,Derek和Tidy的任务就是要监视这些工兵营地的活动情况。由于采取了某种先进的监测手段,所以每个工兵营地的人数C国都掌握的一清二楚,每个工兵营地的人数都有可能发生变动,可能增加或减少若干人手,但这些都逃不过C国的监视。原创 2015-05-29 16:36:38 · 531 阅读 · 0 评论 -
hdu1698just a hook 线段树
懒惰标记的入门题==讲解详见小伙伴的博客 点击打开链接 貌似只是加了注释==我的代码->俩人改了好久才过==注意.L L .R R的区别#include #include#includeusing namespace std;struct node{ int l,r,val,tag; int mid(){return (l+r)/2;}}tree[3000原创 2015-08-08 18:48:37 · 624 阅读 · 0 评论 -
并查集详解
并查集是我暑假从高手那里学到的一招,觉得真是太精妙的设计了。以前我无法解决的一类问题竟然可以用如此简单高效的方法搞定。不分享出来真是对不起party了。(party:我靠,关我嘛事啊?我跟你很熟么?)来看一个实例,杭电1232畅通工程首先在地图上给你若干个城镇,这些城镇都可以看作点,然后告诉你哪些对城镇之间是有道路直接相连的。最后要解决的是整幅图的连通性问题。比如随意给你两个点转载 2015-08-09 14:20:48 · 339 阅读 · 0 评论 -
POJ 1611The Suspects 并查集
我会说之前的方法哪儿错了我还不知道嘛== 链接模板大法好==#include #includeusing namespace std;const int MAXN = 1000100;struct DS{ int f[MAXN]; void init(int n) { for(int i=0;i<n;i++) f[i原创 2015-08-10 09:51:53 · 386 阅读 · 0 评论 -
POJ 2492 A Bug's Life 并查集
#include #includeusing namespace std;int f[3000],relation[3000];void init(int n){ for(int i=0;i<=n;i++) { f[i]=i; relation[i]=1; }}int find(int x){ if(x==f[x])原创 2015-08-10 09:59:48 · 1207 阅读 · 0 评论 -
poj1182食物链 (并查集)
题目在这里哟和之前判断虫子是否有同性恋一样==(不是因为脑洞太大)都是分层的 取模的啊啊啊啊啊仔细观察一下两个代码,相似度好高好高哦哦#include#include#includeusing namespace std;int total;int n,m,a,b,c;int f[500005],rank[500005];void init(int n){ for(原创 2015-08-10 10:13:33 · 344 阅读 · 0 评论 -
HDU 1558 Segment set 并查集
这个题简直丧心病狂啊!!只要两个线段挨上就是一堆里的!!挨上,你懂么你懂么?相交算挨上,共线有重合算挨上,共线没重合不算!!最讨厌数学了!讨厌讨厌@。@还有 之前在纠结到底是以点作为单元还是线段作为单元呢?答案是线段套着点!问一堆里的有多少怎么办?发现就加上==#include#include#includeusing namespace std;int pre[1010]原创 2015-08-10 10:21:02 · 508 阅读 · 0 评论 -
HDU 1198 Farm Irrigation 并查集
自己思路和答案思路一样这种事情最开心啦~其实不看答案自己应该也能改对 又是把行列搞反了#include #include#includeusing namespace std;bool type[15][4]={{1,0,0,1},{1,1,0,0},{0,0,1,1},{0,1,1,0},{1,0,1,0},{0,1,0,1},{1,1,0,1},{1,0,1,1},{0,1,1,原创 2015-08-10 10:24:44 · 542 阅读 · 0 评论 -
2015多校联合第一场5289Assignment RMQ+二分
题意:(看英文真费劲==) 给定一数列 求子区间能够满足其中最大值-最小值差此算法用于求固定区间的最值 本质是动态规划和枚举(一)首先是预处理,用动态规划(DP)解决。设A[i]是要求区间最值的数列,F[i, j]表示从第i个数起连续2^j个数中的最大值。(DP的状态)例如:A数列为:3 2 4 5 6 8 1 2 9 7F[1,0]表示第1原创 2015-09-01 14:59:06 · 366 阅读 · 0 评论 -
hdu2795Billboard【线段树】
Problem DescriptionAt the entrance to the university, there is a huge rectangular billboard of size h*w (h is its height and w is its width). The board is the place where all possible announcement原创 2015-09-21 20:35:50 · 342 阅读 · 0 评论 -
POJ 1442 Black Box【treap模板】
题意:给一个序列,然后给出m个查询,每次查询输入一个数x,对于第i次查询,输出前x个数中第i大的关键字的值。昨晚上课就像被催眠了一般……orz 晚上套模板还不对T^T 大神给的标程自己的编译器都通过不了是什么鬼还是ACdreamer的模板靠谱#include#include#include#include#include#include#includ原创 2015-09-26 10:41:12 · 432 阅读 · 0 评论 -
hdu5249KPI【treap】
Description你工作以后, KPI 就是你的全部了. 我开发了一个服务,取得了很大的知名度。数十亿的请求被推到一个大管道后同时服务从管头拉取请求。让我们来定义每个请求都有一个重要值。我的KPI是由当前管道内请求的重要值的中间值来计算。现在给你服务记录,有时我想知道当前管道内请求的重要值得中间值。 Input有大约100组数据。 每组数据第一行原创 2015-09-26 10:43:50 · 367 阅读 · 0 评论 -
poj2019cornfields【二维RMQ】
本来想自己写来着,憋了半天没写明白,突然意识到这玩意我有邝斌的模板啊~·~WA了n发之后才发现自己错哪了,就不能细心点,唉,比赛可咋整/***********poj20192016.1.1927388K 579MS C++ 1931B***********/#include #include#include#include#includeusing namespace st原创 2016-01-19 23:19:35 · 604 阅读 · 0 评论 -
spojD_query【主席树】统计区间内不重复数的个数
这个题加深了我对主席树的理解~题解的过程是扫描数列建立持久化线段树,若是第一次出现,就在该数位置加一;不是的话,上次出现的位置减一,新位置加一。对于每个询问区间[L,R]在第R个版本的线段树上只有前R个数,在线段树上查询位置L,对经过的区间进行累加。这个做法我想了好久啊==为毛这么建树啊啊啊。举两个极端的栗子:1所有的数字没有重复的,该数位置加一,和前一个题一样,没得说2所有数字都是同原创 2016-01-24 21:37:47 · 1783 阅读 · 0 评论 -
hdu4027Can you answer these queries?【线段树区间更新区间求和】
Problem DescriptionA lot of battleships of evil are arranged in a line before the battle. Our commander decides to use our secret weapon to eliminate the battleships. Each of the battleships can be原创 2016-03-07 21:33:26 · 655 阅读 · 0 评论 -
hdu2852KiKi's K-Number【线段树第k小】
Total Submission(s): 3314 Accepted Submission(s): 1487Problem DescriptionFor the k-th number, we all should be very familiar with it. Of course,to kiki it is also simple. Now Kiki meets a原创 2016-03-08 10:33:36 · 522 阅读 · 0 评论 -
hdu4006The kth great number【线段树第k大】
The kth great numberTime Limit: 2000/1000 MS (Java/Others) Memory Limit: 65768/65768 K (Java/Others)Total Submission(s): 9072 Accepted Submission(s): 3592Problem DescriptionXiao Ming原创 2016-03-08 16:25:14 · 807 阅读 · 0 评论 -
poj2299Ultra-QuickSort【线段树求逆序数】离散化
Ultra-QuickSortTime Limit: 7000MS Memory Limit: 65536KTotal Submissions: 52097 Accepted: 19113DescriptionIn this problem, you have to analyze a particular sorting原创 2016-03-15 16:48:59 · 1021 阅读 · 3 评论 -
poj2823Sliding Window【线段树维护滚动区间最值】
DescriptionAn array of size n ≤ 10 6 is given to you. There is a sliding window of sizek which is moving from the very left of the array to the very right. You can only see thek numbers in the原创 2016-03-17 13:31:12 · 686 阅读 · 0 评论