随笔分类 -  数据结构--树状数组

摘要:1~n<=1e5依次插入序列中某一个位置,求每次插入后的最长上升子序列。 因为新插入的数对前面插入的答案没影响,所以只要能想方设法构造出最终序列即可。 方法一:平衡树!。。。。 方法二:在树状数组上倍增求第K大 然而LIS写残了。。记得是lowerbound不是upper。。 然后最后输出记得和前面 阅读全文
posted @ 2017-10-20 07:13 Blue233333 阅读(330) 评论(0) 推荐(0)
摘要:n<=1e6个数字,开始都是0,m<=1e6个操作:1、把第x个数修改成y;2、询问:对序列中的数字进行c次操作,每次选s个正数把他们-1,问能否进行。 一个数字Ai,如果Ai>=s,那它可以被选中s次;如果Ai<s,那就Ai次。设k个数字大于等于s,小于s的数字的和是sum,只需要:sum<=(c 阅读全文
posted @ 2017-10-18 09:15 Blue233333 阅读(286) 评论(0) 推荐(0)
摘要:n<=50000个数字,m<=200000个查询,每次问L到R之间有多少不同的数字。 这个询问可以离线的,为使L到R之间的数字只被算一次,可以从左往右扫,扫到一个数字就把上一个该数字出现的地方--,把现在这里++,为了配合这种操作,把所有询问按右端点排序,扫到一个地方就把该处所有右端点在这里的询问回 阅读全文
posted @ 2017-10-18 06:47 Blue233333 阅读(134) 评论(0) 推荐(0)
摘要:n<=100000个操作:添加一个不等式ax+b>c,删除一个不等式,查询当x=k时有多少不等式组满足要求,abs(k)<=1e6。 按a的正负来分情况,然后树状数组维护即可。 a=0:b>c就全部+1否则不理,注意不要忘了把他扔进数组里!!!!! a>0:x>(c-b)/a,把它向上取整,并且在- 阅读全文
posted @ 2017-10-17 21:19 Blue233333 阅读(384) 评论(0) 推荐(0)
摘要:n,m<=300,n*m的一个矩阵,q<=200000个操作:修改某个点权值;查询某个矩形范围内某个权值有多少个点。权值<=100。 二维树状数组的模板! 1 #include<stdio.h> 2 #include<string.h> 3 #include<stdlib.h> 4 //#inclu 阅读全文
posted @ 2017-10-17 18:27 Blue233333 阅读(169) 评论(0) 推荐(0)
摘要:求半径d<=50000的圆(不含边界)内n<=50000条直线有多少交点,给直线的解析式。 一开始就想,如果能求出直线交点与原点距离<d的条件,那么从中不重复地筛选即可。然而两个kx+b联立起来加勾股定理特别丑。。 换个想法,一条线在圆上就截了两个点。把这些点做极角排序后(即从y轴正半轴的射线顺时针 阅读全文
posted @ 2017-10-01 17:22 Blue233333 阅读(332) 评论(0) 推荐(0)
摘要:n个数字中,每个数有数字A和属性B,每次操作将某个点x的属性B改变为0或1,求满足这样要求的子序列的个数: 下标a<b<c<d<e,而Aa<=Ab=Ac=Ad>=Ae且Bb=Bc=Bd=1。 区间操作,首推线段树!(然后就不会了,跑去看别人的代码) 是这样的,重点在于中间那三个点,因为我们的修改操作 阅读全文
posted @ 2017-07-18 00:01 Blue233333 阅读(193) 评论(0) 推荐(0)
摘要:对叠放着的n张牌,第i张牌写有数字Ai,进行操作:将牌堆顶的牌取出,若是当前牌堆最小值就扔掉,否则放到牌堆底,求牌堆空时操作次数。 怎么看怎么像约瑟夫。。不过约瑟夫DP我不太熟,于是就yy了一下 “当前最小值”??优先队列。把Ai和i绑起来扔到优先队列里,就可以知道下一步要跳到哪里。 有个问题:如果 阅读全文
posted @ 2017-07-15 12:05 Blue233333 阅读(278) 评论(0) 推荐(0)