上一页 1 ··· 8 9 10 11 12 13 14 15 下一页
摘要: 【题解】 我们先把边按照$a$值从小到大排序,并按照这个顺序加边。 如果当前要加入的边连接的两点$u$与$v$已经是连通的,那么直接加入这条边就会出现环。这时我们需要删除这个环中$b$值最大的边。因此我们需要维护区间最大值,以及最大值的位置。 如果当前$1$与$n$已经连通,就更新$ans$,当前从 阅读全文
posted @ 2018-01-12 20:21 Driver_Lao 阅读(167) 评论(0) 推荐(0) 编辑
摘要: 【题解】 这道题可以用Link-Cut Tree写。。 首先建立一个虚拟节点N+1,$i$与$N+1$连边表示$i$被弹飞了 对于修改操作,先$cut(i,min(n+1,i+k[i]))$,然后再$link(i,min(n+1,i+newk))$ 对于询问操作,先$makeroot(x)$,然后$ 阅读全文
posted @ 2018-01-11 21:54 Driver_Lao 阅读(245) 评论(0) 推荐(0) 编辑
摘要: 【题解】 动态树模板题,只要求维护森林的连通性,直接上板子即可。 1 #include<cstdio> 2 #include<algorithm> 3 #define N 500010 4 #define ls (c[u][0]) 5 #define rs (c[u][1]) 6 using nam 阅读全文
posted @ 2018-01-11 20:00 Driver_Lao 阅读(202) 评论(0) 推荐(0) 编辑
摘要: 1 #include<cstdio> 2 #include<algorithm> 3 #define N 500010 4 #define rg register 5 #define ls (c[u][0]) 6 #define rs (c[u][1]) 7 using namespace std; 阅读全文
posted @ 2018-01-11 19:06 Driver_Lao 阅读(172) 评论(0) 推荐(0) 编辑
摘要: 1 #include<cstdio> 2 #include<algorithm> 3 #define ls (a[u].l) 4 #define rs (a[u].r) 5 #define fa (a[u].f) 6 using namespace std; 7 const int maxn=200 阅读全文
posted @ 2018-01-09 21:18 Driver_Lao 阅读(184) 评论(0) 推荐(0) 编辑
摘要: 【题意概述】 维护一个数列,要求支持以下6种操作: 【题解】 大Boss。。。可以用Treap解决 需要用到垃圾回收、线性建树。 1 #include<cstdio> 2 #include<cstring> 3 #include<algorithm> 4 #define ls (a[u].l) 5 阅读全文
posted @ 2018-01-07 20:30 Driver_Lao 阅读(141) 评论(0) 推荐(0) 编辑
摘要: 【题解】 这是一道区间覆盖的题目,我们可以用树状数组或者线段树来解决。显然,每个区间 [L,R] 被多少条线段覆盖这样计算:R左边的线段的左端点数-L左边的线段的右端点数 这样,我们分别维护1~Pos位置上左端点、右端点的个数即可。 1 #include<cstdio> 2 #include<alg 阅读全文
posted @ 2018-01-05 20:04 Driver_Lao 阅读(193) 评论(0) 推荐(0) 编辑
摘要: 【题解】 用线段数维护差分数组即可。 1 #include<cstdio> 2 #include<algorithm> 3 #define ls (u<<1) 4 #define rs (u<<1|1) 5 #define mid ((a[u].l+a[u].r)>>1) 6 #define len 阅读全文
posted @ 2018-01-04 20:32 Driver_Lao 阅读(170) 评论(0) 推荐(0) 编辑
摘要: 【题解】 本题要计算矩形组成的轮廓线,可以用线段树来实现。 由于区间长度很大,不能直接开线段数记录,我们要先进行离散化。(显然拐点只可能出现在矩形的左右两边上)然后逐个加入矩形并维护每个位置的最大值。最后对每个拐点可能的位置进行查询并统计答案即可。 1 #include<cstdio> 2 #inc 阅读全文
posted @ 2018-01-04 19:48 Driver_Lao 阅读(134) 评论(0) 推荐(0) 编辑
摘要: 【题解】 用Treap维护这个序列。 加入的时候直接插入到末尾,这样Treap就变成一棵以插入时间先后为排序关键字的二叉搜索树。 对于翻转操作,我们分裂出需要翻转的区间,给这个区间的root打一个翻转标记。 在分裂、合并、输出的时候,遇到翻转标记,就把左右儿子交换,同时下传标记。 1 #includ 阅读全文
posted @ 2017-12-22 19:43 Driver_Lao 阅读(848) 评论(0) 推荐(0) 编辑
摘要: 【题意概述】 要求维护一个序列支持以下操作: 1,插入元素x; 2,把序列的所有元素加上x; 3,把序列的所有元素减去x,同时低于一个给定的下限的元素马上被删除; 4,询问序列中第k大的元素。 【题解】 Treap 用一个delta记录元素的增减情况,即实际上的元素的值应该是qval(root,x) 阅读全文
posted @ 2017-12-21 21:56 Driver_Lao 阅读(230) 评论(0) 推荐(0) 编辑
摘要: 【题解】 treap模板题,直接用Treap维护前驱、后继,每次找到更接近当前val的加上就好了。 1 #include<cstdio> 2 #include<algorithm> 3 #define ls (a[u].l) 4 #define rs (a[u].r) 5 #define LL lo 阅读全文
posted @ 2017-12-18 19:08 Driver_Lao 阅读(148) 评论(0) 推荐(0) 编辑
摘要: 【题解】 二分答案+差分 本题要求出尽量小的威力值P,很容易想到二分答案 而本题难点在于二分答案之后的检验。每发子弹对一个区间造成影响,我们可以尝试使用差分。但每发子弹对区间不同位置的影响是不同的。因此我们可以用多阶差分。 1 #include<cstdio> 2 #include<algorith 阅读全文
posted @ 2017-12-15 19:13 Driver_Lao 阅读(132) 评论(0) 推荐(0) 编辑
摘要: 【题意】给出一个n个数的序列,要求取出互补相邻的m个数,使得它们的和最大。 【算法】贪心,堆 【题解】 每次取出最大的a,并且把a[i]设为a[pre[i]]+a[nxt[i]]-a[i] 这种做法类似于给贪心一个反悔的机会,这个反悔的机会实质上是扩大你选择数字的影响范围,一旦扩大就一定不会反悔,因 阅读全文
posted @ 2017-12-13 22:03 Driver_Lao 阅读(296) 评论(0) 推荐(0) 编辑
摘要: 洛谷3377 可以轻松改成斜堆等可并堆 1 #include<cstdio> 2 #include<algorithm> 3 #define ls(x) (a[x].ls) 4 #define rs(x) (a[x].rs) 5 using namespace std; 6 int n,m,tot, 阅读全文
posted @ 2017-12-13 19:45 Driver_Lao 阅读(147) 评论(0) 推荐(0) 编辑
摘要: 洛谷3919 支持如下操作: 在某个历史版本上修改某一个位置上的值 1 #include<cstdio> 2 #include<algorithm> 3 #define ls(x) (a[x].ls) 4 #define rs(x) (a[x].rs) 5 #define mid ((l+r)>>1 阅读全文
posted @ 2017-12-12 20:50 Driver_Lao 阅读(189) 评论(0) 推荐(0) 编辑
摘要: 洛谷3834 主席树入门题,静态区间第k小 权值线段树:一棵线段树的叶子tree[L=R]节点记录序列中满足a[i]=L=R的数的个数,非叶子节点记录儿子的sum之和; 这样我们就可以快速地求出整个序列的第K小(或第K大) 为了能够查询区间的第K小,我们在序列1~n的每个位置i建立一棵权值线段树,那 阅读全文
posted @ 2017-12-11 20:04 Driver_Lao 阅读(242) 评论(0) 推荐(0) 编辑
摘要: 【题意概述】 给你一个n个数的数列,其中某个数出现了超过n div 2次即众数,请你找出那个数。 【题解】 看起来很水。。然而内存限制只有1M 所以要用一点小技巧 因为众数出现的次数超过n/2,所以我们可以把每个数和不一样的数抵消,最后剩下的数一定就是众数 我们用cnt记录目前的众数出现的次数,当目 阅读全文
posted @ 2017-12-11 19:07 Driver_Lao 阅读(145) 评论(0) 推荐(0) 编辑
摘要: 洛谷3835 1 #include<cstdio> 2 #include<algorithm> 3 #include<cstdlib> 4 #define ls (a[u].l) 5 #define rs (a[u].r) 6 #define R (root[Ver]) 7 #define upda 阅读全文
posted @ 2017-12-08 20:43 Driver_Lao 阅读(162) 评论(0) 推荐(0) 编辑
摘要: 对每种颜色开一个二维树状数组 1 #include<cstdio> 2 #include<algorithm> 3 using namespace std; 4 const int maxn=310; 5 int t[110][maxn][maxn],c[maxn][maxn],Q,n,m,k,x, 阅读全文
posted @ 2017-12-06 19:40 Driver_Lao 阅读(156) 评论(0) 推荐(0) 编辑
上一页 1 ··· 8 9 10 11 12 13 14 15 下一页