01 2016 档案

摘要:对于区间旋转使用lazy思想就能解决。然后对于区间搬移,先把a-1结点做根,b+1作为它的右孩子,这样ch[ch[root][1]][0]就是区间[a,b],现将他取出。 然后在将当前的树伸展,把c结点转到根,c+1作为它的右孩子,这样c+1结点的左孩子就是空的,直接将上次取出的作为c+1结点的做孩 阅读全文
posted @ 2016-01-19 10:39 sweat123 阅读(169) 评论(0) 推荐(0)
摘要:好题。我做了很久,学了大牛们的区间搬移。主要的代码都有注释。 阅读全文
posted @ 2016-01-18 20:14 sweat123 阅读(262) 评论(0) 推荐(0)
摘要:对于大神来说这题是水题。我搞这题花了快2天。 伸展树的优点有什么,就是树不管你怎么旋转序列是不会改变得,并且你要使区间反转,只要把第k大的点转到根结点,那么它的左子树就是要交换的区间[l,r),然后交换左右 子树就可以了(中序),根结点的位置就是i+siz[ch[root][0]],i是处理完的结点 阅读全文
posted @ 2016-01-18 09:26 sweat123 阅读(374) 评论(0) 推荐(0)
摘要:用splay做了一遍。 建树时是按照数列序号从小到大排好的,每个节点左子树的序号小于右子树的序号及这个节点本身。由于查询[l,r]要伸展l-1,r+1所以我们要多加2个结点,保证边界处理时不出问题。由于这样每次查找l-1时,要找的应该是l(r+1也是找r+2)。 阅读全文
posted @ 2016-01-17 09:52 sweat123 阅读(292) 评论(0) 推荐(0)
摘要:对于当天的营业额,你要找到之前的数和他差的绝对值最小的和。由于这个是不断在插入的,所以用伸展树来维护。 http://www.lydsy.com/JudgeOnline/problem.php?id=1588 照着kuangbin大牛的代码敲下来的。 阅读全文
posted @ 2016-01-16 09:35 sweat123 阅读(231) 评论(0) 推荐(0)
摘要:学习的博客 网址:http://dongxicheng.org/structure/splay-tree/ http://blog.csdn.net/acm_cxlove/article/details/7815019 http://blog.csdn.net/leolin_/article/det 阅读全文
posted @ 2016-01-16 09:33 sweat123 阅读(204) 评论(0) 推荐(0)
摘要:树链剖分的第一题,易懂,注意这里是边。 阅读全文
posted @ 2016-01-15 20:03 sweat123 阅读(240) 评论(0) 推荐(0)
摘要:简单题,看题目就懂。 阅读全文
posted @ 2016-01-15 20:01 sweat123 阅读(238) 评论(0) 推荐(0)
摘要:简单题。 阅读全文
posted @ 2016-01-15 20:00 sweat123 阅读(219) 评论(0) 推荐(0)
摘要:这题我建了2棵线段树,这样来处理 最值和和值,简单的题目。 阅读全文
posted @ 2016-01-15 19:59 sweat123 阅读(135) 评论(0) 推荐(0)
摘要:NEGATE a,b 将a b间的线段取反,这题应该用线段树+成段更新。我成段更新写的挫了,试了暴力修改过了(数据水)。 也是简单的题目。不过要注意点和边的区别。 阅读全文
posted @ 2016-01-15 19:58 sweat123 阅读(145) 评论(0) 推荐(0)
摘要:注意这里都是把边放到线段树中,所以lca的时候,要注意如果top[x]==top[y] && x==y 的时候已经完成了。 仔细想想边和点的不同之处!!! 阅读全文
posted @ 2016-01-15 09:05 sweat123 阅读(173) 评论(0) 推荐(0)
摘要:给你n个点,m条边,p次操作。n个点相连后是一棵树。每次操作可以是x 到 y 增加 z,或者减z,或者问当前点的值是多少。 可以将树分成链,每个点在线段树上都有自己的点,然后线段树成段更新一下。 阅读全文
posted @ 2016-01-14 16:16 sweat123 阅读(127) 评论(0) 推荐(0)
摘要:http://blog.sina.com.cn/s/blog_7a1746820100wp67.html这个博客很好,很清楚。 注意树的边和点有时候是不一样的,仔细想一想。 http://acm.hust.edu.cn/vjudge/contest/view.action?cid=103962#ov 阅读全文
posted @ 2016-01-14 14:57 sweat123 阅读(111) 评论(0) 推荐(0)
摘要:#include #include #include #include #include #define INF 99999999 #define ll __int64 using namespace std; const int MAXN = 30; ll dp[MAXN][MAXN]; void init() { int i,j,k; memset(dp,0,sizeof(d... 阅读全文
posted @ 2016-01-08 15:06 sweat123 阅读(116) 评论(0) 推荐(0)
摘要:第一次接触数位dp,对于这种题目,数字都是很大,直接遍历肯定超时,通过对每个位子上数字的遍历可以大大减小复杂度。 dp[i][j]表示1到 i位的以j开头的数有几个满足条件的。这样理解一下,然后求出目标n的位数和各个位上的值,遍历即可。 阅读全文
posted @ 2016-01-08 14:38 sweat123 阅读(208) 评论(0) 推荐(0)
摘要:将几个集合合并,求合并后的集合数的个数。 首先先求出各个集合的数的个数相加,减2个集合的相交的个数,加三个集合相交的个数,减四个集合相交的个数。。。。。 http://www.51nod.com/onlineJudge/problemList.html 容斥原理的简单应用。 阅读全文
posted @ 2016-01-06 16:31 sweat123 阅读(162) 评论(0) 推荐(0)