随笔分类 -  数据结构

该文被密码保护。
posted @ 2021-06-05 13:41 violet_holmes 阅读(1) 评论(0) 推荐(0)
该文被密码保护。
posted @ 2021-06-03 09:50 violet_holmes 阅读(1) 评论(0) 推荐(0)
摘要:题目链接 题解 可以发现,对于区间$[l,r]$,只有整块中的众数与不被整块包含的数有成为该区间众数的可能(共$2\cdot 块长+1$个)。因此预处理出$f[i][j]\(表示块编号\)[i,j]$区间内的众数,具体实现:将$a$数组离散化,设$tmp$数组存储每个数出现的次数,枚举$i,j$,用 阅读全文
posted @ 2021-05-28 12:54 violet_holmes 阅读(51) 评论(0) 推荐(0)
摘要:题目链接 题解 因为提供的描述仅为动物间的关系,而无法确定动物的种类。可以开一个原数组3倍的并查集,分别表示A,B,C3类,每类中都有全部$n$个动物。例如A类中的动物$x$表示$x$为A类动物的信息,将可以相互推理得出的信息用并查集链接。对于同类的描述,如果$x,y$之间存在捕食关系,也就是$x$ 阅读全文
posted @ 2021-05-04 13:19 violet_holmes 阅读(51) 评论(0) 推荐(0)
摘要:题目链接 题解 动态查询区间k小值——树状数组套主席树( •̀ ω •́ ) 如果直接主席树上进行动态修改,每次需要修改$[l,r]$区间内所有的根,时间复杂度为$O(nlogn)$。主席树是前缀和,树状数组也是前缀和,而且还可以动态修改,巧了你们两个认识一下( 具体实现:主席树中以$rt_i$为根 阅读全文
posted @ 2021-05-04 13:16 violet_holmes 阅读(33) 评论(0) 推荐(0)
摘要:题目链接 题解 可以发现,只有两相邻元素之间的差会对答案做出贡献。简单证明:设$i<k<j,a_i<a_j$,若$a_k>a_j>a_i$, 易得$a_k-a_i>a_j-a_i,k-i+1<j-i+1$,所以$\frac{a_k-a_i+a_k-a_j}{k-i+1}>\frac{j-i+1}$, 阅读全文
posted @ 2021-04-10 17:06 violet_holmes 阅读(42) 评论(0) 推荐(1)
摘要:题目链接 题解 ⭐:①可以将整除的条件转化为余数为$0$。②枚举左右端点可以找寻单调性,尝试固定一端二分另一端。 暴力的话枚举左右端点,然后$O(n)$求乘积余数,总时间复杂度为$O(n^3)\(。其中区间乘积求余可以使用线段树维护,又可发现,若区间\)[i,j]$的乘积可以被$k$整除,则对于$j 阅读全文
posted @ 2021-03-13 19:12 violet_holmes 阅读(57) 评论(0) 推荐(0)
摘要:题目链接 题解 ⭐:单调栈可以维护$[1,i]$中大于或小于$a_i$的元素。 由于数据范围枚举左右端点并不现实,因此想到求出每个元素对于答案的贡献。设$[1,i)\(中最后一个\)>a_i$的数为$l$,$(i,n]\(中第一个\)>a_i$的数为$r$,$(r,l)$即为$a_i$作为最大值的最 阅读全文
posted @ 2021-03-13 19:11 violet_holmes 阅读(103) 评论(0) 推荐(0)
摘要:题目链接 题解 容易发现,$s_i,t_i$对于$a_+1$的操作影响并不大,因为$t_i<a_$无论如何都会触发该操作。而对于$s_j=s_i,t_j=t_i,j<i$的三元组$s_j,t_j,u_j$只需将$a_-1$即可。我们需要在$logn$的时间内进行上述$+1,-1$的操作,并查询最终$ 阅读全文
posted @ 2021-02-23 19:56 violet_holmes 阅读(56) 评论(0) 推荐(0)
摘要:题目链接 题解 将密文$t$反转后,此题便化为一般的字符串匹配。 因为存在对之后状态产生影响的不同方案,可以想到dp:$dp_i$表示字符串$t$(反转后)前$i$项可以匹配的最后一个单词下标(若无法匹配为$0$)。设单词$j$长度为$a$,如果$dp[i]>0$并且存在单词与$t$串$[i+1,i 阅读全文
posted @ 2021-02-09 15:49 violet_holmes 阅读(85) 评论(0) 推荐(0)
摘要:题目链接 题解 容易看出此题为dp问题,利用LIS的思想可设计出如下$O(n^2k)$的算法。 状态:$dp[i][j]$表示以$a_i$为结尾、长度为$j$的上升子序列个数。 初始值:\(dp[i][1]=1,dp[0][j]=0\quad(1\le i\le n,1\le j\le k)\)。 阅读全文
posted @ 2021-02-07 17:17 violet_holmes 阅读(100) 评论(0) 推荐(0)
摘要:题目链接 题解 从$n,m\le 3\cdot 10^5$可看出,此题需在$logn$的时间内进行区间修改与单点查询。而描述操作位置的只有距离(子树深度)一个变量,可以想到以深度为关键字建立线段树或树状数组。 设点$i$深度为$pos_i$,对于每个操作将深度区间$[pos_,pos_+d_i]+x 阅读全文
posted @ 2021-02-03 20:59 violet_holmes 阅读(50) 评论(0) 推荐(0)
摘要:题目链接 题解 下文将符合题意的数对成为“逆数对”。 可以发现,$x=a_i$的逆数对个数为满足$i<j\le a_i,a_j\ge i$的$j$个数,因为$j$的季数需$\le i$的最大集数,而其最大集数需$\ge i$的季数。对于第一个条件,可以将$j$存入树状数组,每次取区间$[i+1,a_ 阅读全文
posted @ 2021-02-02 20:24 violet_holmes 阅读(76) 评论(0) 推荐(0)
摘要:题目链接 题解 $n$的数字范围很小,又加之01串的条件,容易想到状压。01串的个数很少,一共只有$2^{12}=4096$个,而其余都是重复的,并且$w,k\le 100$,可以想到将每个字符串在不同$k$时的答案预处理。具体方法受Trie树的启发,想到将集合$S$中的01串以二叉树存储,如题目中 阅读全文
posted @ 2021-01-27 18:52 violet_holmes 阅读(48) 评论(0) 推荐(0)
摘要:题目链接 题解 可以想到,这道题需要维护每日的内核数,并利用贪心思想找出该日价值从小到大的前$k$个内核。第一想法是优先队列+二分,但无法处理出队,于是卡住了(# -_ゝ-)。此后阅读了一篇题解,发现可以使用权值线段树。 线段树中维护当日每个价值的内核个数(因为$p_i\le 10^6$,不需要离散 阅读全文
posted @ 2021-01-23 12:06 violet_holmes 阅读(71) 评论(0) 推荐(0)
摘要:CF1142B Solution 题目翻译 题解 这道题的数据范围是$2e5$,所以算法的时间复杂度需要在$O(nlogn)$以内,又因为$q\le 2e5$,所以要么可以在$O(logn)$的复杂度内查询,要么是静态算法。经思考前者不太可行,因此这道题是$O(nlogn)$以内的静态算法,可以想到 阅读全文
posted @ 2021-01-03 22:32 violet_holmes 阅读(83) 评论(0) 推荐(0)
摘要:题目链接 题解 什么时候可以执行操作:若想将$a_i$取出到$b$数组中,则$a_$与$a_{i+1}$中一定有一项没有出现在$b$数组接下来的元素中,因为要将其删除。 如何统计答案:假设$a_i=b_j$,对于每一个$b_j$有两种可能方案,删除$a_$或$a_{i+1}$。易证,在两种方案都可执 阅读全文
posted @ 2021-01-01 18:26 violet_holmes 阅读(57) 评论(0) 推荐(0)