2223: [Coci 2009]PATULJCI Description Input Output 10 3 1 2 1 2 1 2 3 2 3 3 8 1 2 1 3 1 4 1 5 2 5 2 6 6 9 7 10 10 3 1 2 1 2 1 2 3 2 3 3 8 1 2 1 3 1 4 ...
分类:
其他好文 时间:
2016-04-02 20:22:39
阅读次数:
273
一个可重复数字集合S的神秘数定义为最小的不能被S的子集的和表示的正整数。例如S={1,1,1,4,13},1 = 12 = 1+13 = 1+1+14 = 45 = 4+16 = 4+1+17 = 4+1+1+18无法表示为集合S的子集的和,故集合S的神秘数为8。现给定n个正整数a[1]..a[n]
分类:
其他好文 时间:
2016-03-23 16:48:19
阅读次数:
699
将分组计划按照$k$从小到大排序,维护一个单调栈,每个元素为一个矩形,按最底下元素从高到低排列,栈顶最低。 每次加入一个矩形可选区域,维护单调栈,可以往回合并。 然后将所有最低点不满足的矩形取出,合并后放回。 每次考虑栈顶区域,将它取到和下一个矩形底边一致时合并。 可持久化线段树维护,时间复杂度$O
分类:
其他好文 时间:
2016-03-10 14:39:19
阅读次数:
184
法一:暴力! 让干什么就干什么,那么久需要可持久化线段树了。 但是空间好紧。怎么破? 不down标记好了! 每个点维护sum和add两个信息,sum是这段真实的和,add是这段整体加了多少,如果这段区间被完全包含,返回sum,否则加上add * 询问落在这段区间的长度再递归回答。 怎么还是MLE?
分类:
其他好文 时间:
2016-03-02 09:32:58
阅读次数:
556
最后还是去掉异或顺手A了3673,,, 并查集其实就是fa数组,我们只需要维护这个fa数组,用可持久化线段树就行啦 1:判断是否属于同一集合,我加了路径压缩。 2:直接把跟的值指向root[k]的值破之。 3:输出判断即可。 难者不会,会者不难,1h前我还在膜这道题,现在吗hhh就当支持下zky学长
分类:
其他好文 时间:
2016-02-27 22:13:18
阅读次数:
179
先跑出dfs序。。然后对于询问p,k ans=min(k,dep[p])*s[p]+∑s[y] y是p子树上的点且满足距离限制。 只要对dfs序建可持久化线段树就可以快速求出∑s[y] (权当复习可持久化线段树了。。。询问的时候因为这是一棵可持久化线段树,所以访问到的节点如果是空就要退出来不然就要T
分类:
其他好文 时间:
2016-02-10 14:17:55
阅读次数:
300
用可持久化线段树维护可持久化并查集。 调了一下午,改为按秩合并就过了。。。 #include<bits/stdc++.h> #define REP(i,a,b) for(int i=a;i<=b;i++) #define MS0(a) memset(a,0,sizeof(a)) using name
分类:
其他好文 时间:
2016-02-05 00:58:07
阅读次数:
226
poj2104 求区间第k大 可持久化线段树 #include<iostream> #include<cstdio> #include<cstring> #include<cstdlib> #include<algorithm> #define REP(i,a,b) for(int i=a;i<=b
分类:
其他好文 时间:
2016-02-04 19:00:01
阅读次数:
196
从左到右加边, 假如+的边e形成环, 那么记下这个环上最早加入的边_e, 当且仅当询问区间的左端点> _e加入的时间, e对答案有贡献(脑补一下). 然后一开始是N个连通块, 假如有x条边有贡献, 答案就是N-x. 用LCT维护加边, 可持久化线段树维护询问. O(NlogN)-----------
分类:
其他好文 时间:
2016-02-02 14:50:37
阅读次数:
177
本题既不是rmq也不会simple(对我这种蒟蒻而言) 一开始只能想到树套树套树TAT然后看了看数据范围果断滚去膜拜题解。 然后才知道预先排序一下可以弄掉一个log。不过得写可持久化线段树套可持久化线段树。。 然后愉悦的开码了。。。感人的是竟然不用调。。。更感人的是交上去直接tle了。 ...
分类:
其他好文 时间:
2016-01-18 22:55:00
阅读次数:
495