![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
===数据结构===
文章平均质量分 57
Loi_LXTT
这个作者很懒,什么都没留下…
展开
-
<线段树版>codevs 3304 水果姐逛水果街Ⅰ
–昨天晚上没有调完我的线段树做法,今天才来,感觉这个题正解可能就是线段树吧,前面称之为DP的方法有点扯,但是能过啊,能过就好QAQ *题目链接:http://codevs.cn/problem/3304/ –在查询时,因为要同时返回最大值,最小值和答案三个值,所以可以定义一个结构体型的Ask函数,这样就不用再单独写Ask_max和Ask_min函数了,省时省力 –注意每次返回一个Ask函数时,原创 2017-09-26 08:29:53 · 486 阅读 · 0 评论 -
<并查集+脑洞>codevs 1995 黑魔法师之门
去题面的传送门第一眼觉得这题很难。。。然后在手推样例时,发现每在一个连通块里加一条边,对答案的贡献就是原图的答案+1.也就是答案变为原来的两倍加一。一开始只是观察样例是这样的。后来发现这个题的确是这样。 为什么呢? (前提,加入的边的两节点都已经在连通块里) ①这两个节点本来就有边连接。相当等于用这条边替换其他的边。 ②这两个节点本来没有边连接。相当等于增加了一个强连通分量 每次答案输出原创 2017-10-14 21:45:07 · 462 阅读 · 0 评论 -
<并查集>luogu 1197 星球大战
去题面的传送门记得之前做过一个跟这个题很类似的。那道题是每次删一条边,问联通块的个数。正解就是离线处理,然后倒序加边,用并查集维护。而这道题是删点,同样想到离线处理然后倒序加点,唯一的不同是这道题要把这个点连接的所有边都for一遍。。。 话不多说,上代码:#include<iostream>#include<cstdio>#include<cstring>#include<algorith原创 2017-10-14 19:14:41 · 309 阅读 · 0 评论 -
<二分||线段树>【noip 2012】codevs 1217 借教室
这就是个题面两种做法啊,二分和线段树 一.二分+前缀和: 从第一天到第n天,一天一天地算,然后二分找有没有不符合的,虽然很暴力,但是可以做啊QAQ 代码:#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>using namespace std;const int maxn=1000000+10;原创 2017-10-06 10:42:07 · 238 阅读 · 0 评论 -
<单调栈/悬线法>codevs 2491 玉蟾宫 1159 最大全0子矩阵
玉蟾宫 最大全0子矩阵 曾经做过玉蟾宫,现在拿来再做,却早就忘了。。。 一直在思考这个东西为什么要用单调栈来做。 既然是从左到右扫描,如果上一个矩形的高度大于当前高度,那么上一个矩形的高度对后面的答案就没有贡献了。如果上一个矩形的高度等于当前高度,那我们直接累加得到的答案肯定更优。对于这两种情况的矩形,既然留之无用,那为什么不扔掉!当把所有高度大于等于当前矩形的矩形扔掉后,会发现剩下的就是一原创 2017-10-29 19:42:35 · 332 阅读 · 0 评论 -
<(扩展域/加权)并查集>NOI 2001 食物链
可提交的传送门题目描述 Description动物王国中有三类动物 A,B,C,这三类动物的食物链构成了有趣的环形。A吃B,B吃C,C吃A。 现有N个动物,以1-N编号。每个动物都是A,B,C中的一种,但是我们并不知道它到底是哪一种。 有人用两种说法对这N个动物所构成的食物链关系进行描述: 第一种说法是“1 X Y”,表示X和Y是同类。 第二种说法是“2 X Y”,原创 2017-10-27 09:21:43 · 364 阅读 · 0 评论 -
<并查集>luogu 1196 银河英雄传说
去题面的传送门 第一反应是并查集维护战舰之间的集合关系,记录每一个战舰前面的战舰数量pre[i],记录每一个并查集的集合大小rank[i],每次合并更新pre的大小,查询时如果两艘战舰在不同的集合里,直接return -1。反之,返回两艘战舰的pre之差-1,就是两艘战舰之间的战舰数量 但是对于如何维护pre,我调试了很久。 一开始想的是,每次合并时,把排列在后面的那个集合的根节点的pre+前原创 2017-10-27 16:58:59 · 252 阅读 · 0 评论 -
【noip 2010】关押罪犯
去题面的传送门Solution 1:并查集QAQ之前做过并的查集做法。 按权值排序,优先把大权值的分开 对于一个节点a,a+n表示和它不在一个监狱里 代码:#include<iostream>#include<cstdio>#include<cstring>#include<cmath>#include<cstdlib>#include<algorithm>using namesp原创 2017-10-21 07:52:34 · 239 阅读 · 0 评论 -
<线段树系列1> codevs 1080 线段树练习
害怕.cpp 第二篇博客竟然是线段树2333 来一道简单的裸·线段树模板:codevs 1080 线段树练习题目描述 Description: 一行N个方格,开始每个格子里都有一个整数。现在动态地提出一些问题和修改:提问的形式是求某一个特定的子区间[a,b]中所有元素的和;修改的规则是指定某一个格子x,加上或者减去一个特定的值A。现在要求你能对每个提问作出正确的回答。1≤N<100000,,原创 2017-08-13 18:03:32 · 321 阅读 · 0 评论 -
<线段树系列2> codevs 1082 线段树练习2
还是一道很简单的线段树模板codevs 1082 线段树练习2题目描述 Description 给你N个数,有两种操作 1:给区间[a,b]的所有数都增加X 2:询问第i个数是什么?输入描述 Input Description 第一行一个正整数n,接下来n行n个整数,再接下来一个正整数Q,表示操作的个数. 接下来Q行每行若干个整数。如果第一个数是1,后接3个正整数a,b,X,表原创 2017-08-13 18:12:00 · 419 阅读 · 0 评论 -
<线段树系列3> codevs 1082 线段树练习3
codevs 1082 线段树练习3—-这是我学习线段树的模板题 题目描述 Description 给你N个数,有两种操作: 1:给区间[a,b]的所有数增加X 2:询问区间[a,b]的数的和。输入描述 Input Description 第一行一个正整数n,接下来n行n个整数, 再接下来一个正整数Q,每行表示操作的个数, 如果第一个数是1,后接3个正整数,原创 2017-08-13 18:29:19 · 291 阅读 · 0 评论 -
<线段树系列4> codevs 4927 线段树练习5
鉴于<线段树练习4>我还没有打 所以 <线段树系列4>就变成了 线段树练习5 w(゚Д゚)w 没错就是这样 ┭┮﹏┭┮—>题外话:调了两天才调好,忘了在下放标记时把儿子的flg标为1!!!!!codevs 4927 线段树练习5题目描述 Description 有n个数和5种操作 add a b c:把区间[a,b]内的所有数都增加c set a b c:把区间[a,b]内原创 2017-08-13 18:44:26 · 310 阅读 · 0 评论 -
<st表模板> codevs 2173 忠诚
*题目链接:http://codevs.cn/problem/2173/ –讲真我觉得st表这种倍增的思想和<水果姐逛水果街Ⅱ>的思想真的很像,但是处理的时候还是有很大差别的 –st表O(nlogn)处理,O(1)查询 1.预处理fa数组: ①节点编号一定要逆序循环 ②递推式:fa[i][j]=min(fa[i][j-1],fa[i+2^(j-1)][j-1]),即:把i–>j原创 2017-09-26 11:43:13 · 234 阅读 · 0 评论 -
【队内胡策 11.1】 T3
考试的时候打了八十分暴力QAQ虽然八十分过了,但是算法有bug。。数据没有卡我算法,然后就水过了8个点。。害怕。 正解: 二分+并查集 二分前mid个是否有矛盾的,特判一下全部符合的,答案为n+1 验证答案时,用并查集维护。 首先,如果已知一段区间[a,b]的最小值为x1,再出现一组猜测:[c,d]的最小值为x2。 ① 若x1 > x2且区间[c,d] 包含在[a,b]里,则自相矛盾。原创 2017-11-01 20:01:55 · 309 阅读 · 0 评论