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

摘要:$n \leq 50000$的树,有点权$\leq 1e13$,$q \leq 400000$次操作,有两种操作:从$s$跳到$t$每次$k$步,不到$k$步直接跳到$t$,每次把经过的点取根号;同样的跳法,对经过的点求和。 首先一个数根号没几次就变0了因此可以大力修改。根号大力搞,设块大小$S$, 阅读全文
posted @ 2018-04-23 21:32 Blue233333 阅读(384) 评论(0) 推荐(0)
摘要:$n \leq 100000$的数列给$m \leq 300000$的询问,每次问一个区间里选两个数差的最小值。数字$\leq 1e9$。 根号算法: 无脑莫队加个平衡树或者权值线段树来查前驱后继是$n \sqrt{n} log_2n$的。 如果只有删除可以用链表实现,所以想办法去掉插入操作。对左端 阅读全文
posted @ 2018-04-18 08:21 Blue233333 阅读(352) 评论(0) 推荐(0)
摘要:$n \leq 100000$个飞机在坐标轴上,给坐标给速度,坐标速度异号,还有一个风速在$[-w,w]$区间,$w$比最小的速度绝对值要小。由于风速不知道,所以问有多少对飞机可能在原点相遇。 思维定势:$\frac{x_i}{v_i+v}=\frac{x_j}{v_j+v}$,$v$是风速,然后推 阅读全文
posted @ 2018-04-11 19:27 Blue233333 阅读(177) 评论(0) 推荐(0)
摘要:$n \leq 100000$的01串(其实啥串都行),给$m \leq 100000$个询问,每次问$[L,R]$,回答:前缀$L,L+1,...,R$中,任意两个的最长公共后缀的长度。 这种前缀后缀的询问,无脑先建个后缀树先,反串的后缀树正串的sam哦。 然后现在问题就是:每次问一个区间的点集, 阅读全文
posted @ 2018-04-10 10:58 Blue233333 阅读(188) 评论(0) 推荐(0)
该文被密码保护。
posted @ 2018-03-31 10:03 Blue233333 阅读(3) 评论(0) 推荐(0)
摘要:$n \leq 50000$,$q \leq 50000$,$n$的数列$q$个询问,每次问某个区间只交换相邻俩数,要交换几次才能升序。数字范围不知反正要离散化。 注意不要学了莫队就把离线题套路忘了,询问右端点排序也是常用快捷方法。 好那我们试试。不会。好上莫队。 每次增加一个数,答案加上比他大(在 阅读全文
posted @ 2018-03-15 11:01 Blue233333 阅读(140) 评论(0) 推荐(0)
该文被密码保护。
posted @ 2018-02-23 18:13 Blue233333 阅读(3) 评论(0) 推荐(0)
摘要:n<=500,n*n的矩阵,m<=60000个询问每次问子矩阵第K小。 方法一:第K小什么的是可以二分的,那就整体二分套二维树状数组吧! 这里有一个细节优化,本来整体二分是logMax的嘛,可以先把数字排个序,就变成logn了。这是没优化的后果(话说3个log确实极卡) 方法二:分块,n*n个数字从 阅读全文
posted @ 2018-01-08 08:39 Blue233333 阅读(181) 评论(0) 推荐(0)
摘要:n<=10000个数有m<=10000个操作,1、询问一个区间的第k小的数;2、单点修改。 带修主席树。 整体二分。 整体二分的必要条件: 1 #include<string.h> 2 #include<stdlib.h> 3 #include<stdio.h> 4 //#include<asser 阅读全文
posted @ 2018-01-07 21:24 Blue233333 阅读(271) 评论(0) 推荐(0)
摘要:一个数表上第i行第j列表示能同时整除i和j的自然数,Q<=2e4个询问,每次问表上1<=x<=n,1<=y<=m区域内所有<=a的数之和。n,m<=1e5,a<=1e9。对2^31取模。 这个a很讨厌就先不理他。首先i行j列的那个数其实是$a_{ij}=\sum_{x|gcd(i,j)} x$,令$ 阅读全文
posted @ 2018-01-02 13:44 Blue233333 阅读(368) 评论(0) 推荐(0)
摘要:n<=100000种食物,给每个食物煮熟时间,有q<=500000个操作:在某时刻插入某个食物;查询熟食中编号最小的并删除之;查询是否有编号为id的食物,如果有查询是否有编号为id的熟食,如果有熟食删除之,否则输出其离煮熟的最小时间;查询编号在[L,R]的熟食有多少。保证操作时间递增。 可以发现:针 阅读全文
posted @ 2017-12-25 07:14 Blue233333 阅读(207) 评论(0) 推荐(0)
摘要:给定n<=200000个操作:单点插入,查最后若干个数的Max,强制在线。 在线个鬼啊至少我空间还是可以先分配的,把序列倒过来,分配好空间,每个查询就是一个前缀Max了。 1 #include<stdio.h> 2 #include<string.h> 3 #include<algorithm> 4 阅读全文
posted @ 2017-12-21 21:55 Blue233333 阅读(149) 评论(0) 推荐(0)
摘要:给一个字符串支持以下操作:区间删除某个特定字符。最后输出字符串。n,m<=200000。 这题我居然不会可以回家了。。 首先,单点删除,选个平衡树比如set。 然后,他给的下标是会随删除操作变化的,需要查“存在于字符串中的第K个是谁”来找左右端点,一个树状数组搞定。 树状数组找出题目给的x,y在初始 阅读全文
posted @ 2017-12-18 21:42 Blue233333 阅读(267) 评论(0) 推荐(0)
摘要:n<=10000个数m<=10000次操作:1、L~R中有多少种数字,2、单点修改,修改次数<=1000。 一种通法是记pre[i]表示i前最近的和a[i]相等的数字,然后问题变成:[L,R]中有多少个pre[i]<L。 方法一:pre数组的动态维护可以用set。对每个数开一个set存所有出现位置, 阅读全文
posted @ 2017-12-14 13:25 Blue233333 阅读(321) 评论(0) 推荐(0)
摘要:n<=300000的串,每一位有权<=1e9,对每个r=0~n-1问lcp长度为r的两个后缀有多少种,并在其中找出一个二元后缀使得他们开头的字符对应权值乘起来最大。 n*n*n:略 n*n*logn:哈希,略 lcp长度为指定长度我不会,但longes common suffix--最长公共后缀,这 阅读全文
posted @ 2017-12-11 19:41 Blue233333 阅读(192) 评论(0) 推荐(0)
摘要:n<=100000个字符串,总长度<=100000,问每个字符串有多少子串至少出现在n个串中的m个。 方法一:(未写)串在一起,后缀数组搞出来,然后height数组--排名相邻两个后缀的lcp搞出来,然后可能产生贡献的就是一段连续的height。对这段连续的height,如果有区间[L,R],满足R 阅读全文
posted @ 2017-12-06 19:51 Blue233333 阅读(283) 评论(0) 推荐(0)
摘要:n<=10000的序列做m<=10000个操作:单点修改,查区间第k小。 所谓的主席树也就是一个值域线段树嘛。。不过在这里还是%%fotile 需要做一个区间查询,由于查第k小,需要一些能够支持数值操作的东西,那就选择值域线段树,线段树上每个区间[L,R]表示的是值在L~R的数的相关信息,比如这里的 阅读全文
posted @ 2017-11-29 16:18 Blue233333 阅读(148) 评论(0) 推荐(0)
摘要:n<=500000的序列和m<=500000的符号串,求最长的子序列,满足选中的数中第i个数和第i+1个数满足符号关系Si。 最长xx子序列--DP+树状数组。 1 #include<stdio.h> 2 #include<string.h> 3 #include<algorithm> 4 #inc 阅读全文
posted @ 2017-11-28 07:07 Blue233333 阅读(153) 评论(0) 推荐(0)
摘要:对w*w,w<=2000000的矩形,一开始全是0(或一开始全是s),n<=170000个操作,每次操作:矩阵内某点加上一个数,查某一个子矩阵的和,保证修改数<=160000,询问数<=10000。 这还是一个比较明显的三维偏序:时间维,以及x和y。由于现在时间维是一个Ti<Tj,而x和y是要查x1 阅读全文
posted @ 2017-11-24 13:43 Blue233333 阅读(170) 评论(0) 推荐(0)
摘要:n<=100000个人,每个人三个属性Ai,Bi,Ci,一个人i的等级为Ai>=Aj,Bi>=Bj,Ci>=Cj的人数,求每个等级有多少人。 裸的三维偏序。按照常规思路,一维排序,一维归并,一维利用单调性或用树状数组维护,这里选择后者。 先按Ai排序,然后在分治过程中,solve(l,mid),so 阅读全文
posted @ 2017-11-23 19:52 Blue233333 阅读(184) 评论(0) 推荐(0)