随笔分类 - 数据结构
摘要:n<=1e5个数,m<=1e5个操作:区间加,查区间最大的1~i号点的和。 第一次见到nsqrt(n)logn能过1e5的。。然而跑得很慢 普通数据结构感觉难下手,那就分块。先处理前缀和数组。一次修改,实际上把一段前缀和加上了一个等差数列,然后把这区间后面的前缀和加上某个固定数字,也可以看成另一个等
        阅读全文
                
摘要:n<=10000个数m<=10000次操作:1、L~R中有多少种数字,2、单点修改,修改次数<=1000。 一种通法是记pre[i]表示i前最近的和a[i]相等的数字,然后问题变成:[L,R]中有多少个pre[i]<L。 方法一:pre数组的动态维护可以用set。对每个数开一个set存所有出现位置,
        阅读全文
                
摘要:n<=40000个数,在线问m<=50000次区间众数,数字Ai<=1e9。 重要结论:$mode(a \cup b)\epsilon mode(a) \cup b$,显然。 用分块做,对区间[L,R]取众数,就先对他们跨过的块O(1)取答案--预处理A(i,j)表示块i到块j的众数即可,然后对两边
        阅读全文
                
摘要:模板 1 #include<stdio.h> 2 #include<algorithm> 3 #include<string.h> 4 #include<stdlib.h> 5 #include<math.h> 6 //#include<bitset> 7 //#include<iostream> 
        阅读全文
                
摘要:感觉这才算入门题吧。。前面那些线段树练习,改几个字符就过了一定要搞成几道题。。 n<=2e5的数列,给常数K<=2e5,m<=2e5个操作,区间加,问一个区间里K的倍数。 这题空间???当成512MB吧。。n*sqrt(n)开得下 每个块记cnt(x,i)表示第x个块有多少数%K=i,以及整块+标记
        阅读全文
                
摘要:n<=300000的串,每一位有权<=1e9,对每个r=0~n-1问lcp长度为r的两个后缀有多少种,并在其中找出一个二元后缀使得他们开头的字符对应权值乘起来最大。 n*n*n:略 n*n*logn:哈希,略 lcp长度为指定长度我不会,但longes common suffix--最长公共后缀,这
        阅读全文
                
摘要:n<=100000个字符串,总长度<=100000,问每个字符串有多少子串至少出现在n个串中的m个。 方法一:(未写)串在一起,后缀数组搞出来,然后height数组--排名相邻两个后缀的lcp搞出来,然后可能产生贡献的就是一段连续的height。对这段连续的height,如果有区间[L,R],满足R
        阅读全文
                
摘要:n<=100000个带权区间,m<=100000个询问,每次问覆盖某个点的所有区间的权值的前K小的和,强制在线。 差分一下就变主席树了嘛。。然而调了半天。。 (若是此题入门可以看下其他人的博客) 1 #include<stdio.h> 2 #include<string.h> 3 #include<
        阅读全文
                
摘要:n<=100000,m<=500000的图有点权边权,q<=500000个询问每次问从x出发经过不超过y的边权能到的点权第K大,加强版强制在线。 Emmmmmm有一个漂亮的方法来转化,就是对原图做MST,做的时候要连接两个点时不要直接连,新开一个点然后让这两个点连上这个点。 这样就把边权挂到树上了,
        阅读全文
                
摘要:n<=100000的点权树,有m<=100000个询问,每次问两个点间的第k小点权,保证有解,强制在线。 主席上树啦!类似于之前的序列不带修改询问的前缀表示法,现在只要把前缀当成某点到根的信息即可。然后比如要问x点和y点,z为lca(x,y),w为z的爸爸,那么x,y,z,w四棵线段树一起跑即可。 
        阅读全文
                
摘要:n<=500000个数,m<=500000个询问,每次问区间里出现次数>(R-L+1)的数字是谁,没有输出0. 写了带修改发现不会不带修改了。。。。 不带修改的话,n个点,每个点表示一个前缀,每加入一个数时,主席树上只有logn个节点的信息,所以每次只用新建logn个节点,那前缀对应线段树里其他的信
        阅读全文
                
摘要:n<=10000的序列做m<=10000个操作:单点修改,查区间第k小。 所谓的主席树也就是一个值域线段树嘛。。不过在这里还是%%fotile 需要做一个区间查询,由于查第k小,需要一些能够支持数值操作的东西,那就选择值域线段树,线段树上每个区间[L,R]表示的是值在L~R的数的相关信息,比如这里的
        阅读全文
                
摘要:n<=500000的序列和m<=500000的符号串,求最长的子序列,满足选中的数中第i个数和第i+1个数满足符号关系Si。 最长xx子序列--DP+树状数组。 1 #include<stdio.h> 2 #include<string.h> 3 #include<algorithm> 4 #inc
        阅读全文
                
摘要:n<=200000个平面上的点,问有多少对点(i,j)满足Xi<Xj,Yi<Yj,且不存在k使得Xi<Xk<Xj && Yi<Yk<Yj。保证Xi,Yi互不相同。 看起来像一个偏序问题,先按Xi排序然后分治来做,但是那坨长长的东西怎么搞呢?试了若干种方法,不会,看题解。 首先Y这一维是要满足的,所以
        阅读全文
                
摘要:对w*w,w<=2000000的矩形,一开始全是0(或一开始全是s),n<=170000个操作,每次操作:矩阵内某点加上一个数,查某一个子矩阵的和,保证修改数<=160000,询问数<=10000。 这还是一个比较明显的三维偏序:时间维,以及x和y。由于现在时间维是一个Ti<Tj,而x和y是要查x1
        阅读全文
                
摘要:n<=100000个人,每个人三个属性Ai,Bi,Ci,一个人i的等级为Ai>=Aj,Bi>=Bj,Ci>=Cj的人数,求每个等级有多少人。 裸的三维偏序。按照常规思路,一维排序,一维归并,一维利用单调性或用树状数组维护,这里选择后者。 先按Ai排序,然后在分治过程中,solve(l,mid),so
        阅读全文
                
摘要:给n<=300000的树,每个点上有一个字母,一个点的权值为:从该点出发向下走到任意节点停下形成的不同字符串的数量,问最大权值。 题目本身还有一些奇怪要求在此忽略。。 Trie合并的模板题。 1 #include<stdio.h> 2 #include<string.h> 3 #include<st
        阅读全文
                
摘要:有一辆车一开始装了编号0-a的奶茶,现有m次操作,每次操作Pi在[-1,b),若Pi为一个未出现过编号的奶茶,就把他买了并装上车;若Pi为一个在车上的奶茶,则把他丢下车;否则,此次操作为捡起最早丢下去的奶茶,若没有符合要求的奶茶则忽略此次操作。对每次操作需要在线询问:操作进行后,不在车上的奶茶的最小
        阅读全文
                
摘要:n<=100000个山,每个山有高度,从一个山到另一个山代价为高度差,有A和B两人一起开车,A每次选前进方向的次近山,B选最近,保证山高度不同且如果代价相同的山低的代价算小,每次旅行先A走,然后B,然后AB轮流开车,旅行如果下一次找不到目的地或者下一次到目的地时总代价超过了指定的X,他们就会停下。现
        阅读全文
                
摘要:n<=1e6 * m<=1e6的坐标系下求顶点不是指定的K<=2e3个点的正方形个数,%1e8+7. 一个基本的思路就是容斥,总-一个点+两个点-三个点+四个点。 总:把一个斜斜的正方形看成一个外接的正正的正方形,所以一个边长为d的正方形,顶点在他边上的正方形有d个,而边长为d的正方形在整个图上有(
        阅读全文
                

 浙公网安备 33010602011771号
浙公网安备 33010602011771号