
数据结构
只玩三国的程序猿
23333333333
展开
-
POJ 2155 Matrix
典型的二维树状数组的题目,具体的细节代码来看吧,当模板就行。代码://// Created by CQU_CST_WuErli// Copyright (c) 2015 CQU_CST_WuErli. All rights reserved.//// #include<bits/stdc++.h>#include <iostream>#include <cstring>#incl原创 2015-11-28 23:19:19 · 355 阅读 · 0 评论 -
Codeforces 700B Connecting Universities(树的中心)
题意: 给你树上的一些点,问你如何把他们两两分组,是的每组的距离总和最大。分析: 很显然的就是,如果能够让这些点都经过最远的点,甚至是根的话,那么答案肯定是足够大的,仔细想想之后可以联想到树的重心,但是这个重心不是整个的重心,而是根据那选定的点的重心,找到之后一次dfs就好了。代码://// Created by CQU_CST_WuErli// Copyright (c) 2原创 2017-02-02 21:44:44 · 535 阅读 · 0 评论 -
Codeforces 696A Lorenzo Von Matterhorn(LCA)
题意: 给你一棵树,其实就是按照线段树的方法建的树,有两种操作,将u到v的路径上的边权全部加w,然后询问从u到v的路径上的边权和。解法: 因为节点的编号很大,所以不能直接建树,但是可以知道,这棵树的最大深度也就是62层,所以我们可以用map来保存边权,或者把边权放在点权上,就像树链剖分那样,每次操作时就可以暴力的向上更新,因为最多1000次操作,哪怕每次都是最深的节点,也最多向上63次,总原创 2017-02-02 21:39:14 · 482 阅读 · 0 评论 -
Codeforces 685D Kay and Eternity (扫描线)
题意: 给你nn个点,再给你正方形边长,问你在整个无限大的网格中,包含有1,2,3..n1,2,3..n个点的正方形有多少个解法: 因为整个网格是无限大的,而且点的坐标范围也很大,所以需要离散化,既然用到了离散化,而且又是这种覆盖的问题,就可以考虑扫面线,我们用cnt[y]来辨识y这个坐标被覆盖了多少次,因为确定一个正方形只需要确定左下的点就好了,所以只需要统计左下被覆盖多少次。我们把每一原创 2017-02-02 21:35:57 · 831 阅读 · 0 评论 -
Codeforces 685B Kay and Snowflake(树的重心)
题意: 给你一棵树,问你每一颗子树的重心是哪一个节点。解法: 树的重心有一个性质,当把两棵树合并时,新的树的重心肯定在两颗树重心之间的路径上,所以我们只需要看当前节点到他重儿子重心之间的路径中是否有满足条件的点就可以了,(重儿子请去看树链剖分)因为重儿子是最大的,不在这个路径上找,会让重儿子单独出来,肯定不满足条件。//// Created by CQU_CST_WuErli//原创 2017-02-02 21:33:43 · 708 阅读 · 0 评论 -
Codeforces 689D Friends and Subsequences(二分+RMQ)
题意: 给你两个数列a和b,问你其中有多少对l和r使得maxri=lai=minri=lbimax_{i=l}^{r}a_{i} = min_{i=l}^{r}b_{i}。 这个题有一个很正宗要的性质:假设我们固定l,那么对于l到r这个区间内的maxri=lai−minri=lbi≤maxr+1i=lai−minr+1i=lbimax_{i=l}^{r}a_{i} - min_{i=l}^原创 2016-07-08 17:18:58 · 580 阅读 · 0 评论 -
POJ 2823 Sliding Window(单调队列||线段树)
题意: 让你不停的查询区间长度为k的最小值和最大值 一开始用set模拟,发现常熟太大,T了,然后开始学单调队列,看了一会儿还是好理解的,所以就写了,发现G++会T,只能交C++,后来发现 有人线段树也能过,于是就写了一发,还真行,只不过就是吧查询的答案用全局变量来存,减少return的时间消耗,还是只能交C++。单调队列://// Created by CQU_CST_WuE原创 2016-03-05 00:21:32 · 462 阅读 · 0 评论 -
HDU 1542 HDU 1225 (线段树扫描线)
关于扫描线,我是看的学长博客: http://blog.csdn.net/lwt36/article/details/48908031 所以基本代码差不多。HDU1542题意:最初始扫描线,想看模拟过程的可以去看上面那个博客,模拟一下就知道了。其中有一点要注意,那就是线段树离散化后知后觉的区间,表示的是[l,r+1],为什么要这样呢,你根据这题的样例模拟一下过程,你会发现,如果你采用的是[原创 2016-02-11 14:21:18 · 782 阅读 · 0 评论 -
POJ 3667 Hotel (区间合并)
题意:初始给你一个1序列,然后有两个操作,一个是找到一个标号最小的位置能够连续放下x个0,一个是吧一段全部变成1,典型的线段树区间合并。题目要求如果有多个答案,输出字典序小的,所以我们只要在查询的时候优先返回左边的就行。贴模板。代码://// Created by CQU_CST_WuErli// Copyright (c) 2015 CQU_CST_WuErli. All righ原创 2016-02-09 18:44:03 · 389 阅读 · 0 评论 -
HDU 1754 I Hate It (splay区间最值单点修改模板)
事实证明,高级数据结构的内存很蛋疼- - 一定要记得删除内存//// Created by CQU_CST_WuErli// Copyright (c) 2015 CQU_CST_WuErli. All rights reserved.//// #include<bits/stdc++.h>#include <iostream>#include <cstring>#includ原创 2016-02-09 14:42:50 · 551 阅读 · 0 评论 -
HDU 1166 敌兵布阵(splay区间求和模板)
我就是贴一个模板。//// Created by CQU_CST_WuErli// Copyright (c) 2015 CQU_CST_WuErli. All rights reserved.//// #include<bits/stdc++.h>#include <iostream>#include <cstring>#include <cstdio>#include <c原创 2016-02-08 23:19:37 · 598 阅读 · 0 评论 -
HDU 5732 Subway(树同构)
题意: 给你两个树,让你判断是否同构。分析: 这个题目还是挺好的,主要考验了Hash的技术,如何能够把两颗树Hash出来是难点之一,题解给出了一个办法,就是把每个子树的Hash值乘以一个小质数累乘然后模一个大质数,但是只要是这种hash肯定会出现重复的情况,所以我们需要对重复的hash值进行多次检验,另外,要把这个树变成有根树,可以选择中心或者是重心,这二者是不同的,但是都是可以做的。具体原创 2017-02-02 21:48:16 · 732 阅读 · 0 评论