返回顶部

随笔分类 -  树状数组/ST表

摘要:牛客练习赛91 D.监狱逃亡 因为总共就$3$行,先计算三行的前缀和,我们假设第一行在$i$处下来,第二行在$j$处下来,那么就有$sum[1][i]+sum[2][j]-sum[2][i-1]+sum[3][n]-sum[3][j-1]\ge 0$ 移项得到$sum[2][j]-sum[3][j- 阅读全文
posted @ 2021-11-18 15:39 _Kolibri 阅读(83) 评论(0) 推荐(0)
摘要:题意:长度为$n$的序列$a$,$m$个询问,每次询问$[l,r]$中有多少种数。 题解:假设我们现在查询的区间是$[l,r]$,这其中某个数字重复出现了,如果我们将询问离线储存下来,按右区间从小到大遍历的话,那么这个数字只要取区间中最后一次出现的位置就好。那么有了这个这个结论,我们就可以用前缀和来 阅读全文
posted @ 2021-10-10 19:45 _Kolibri 阅读(57) 评论(0) 推荐(0)
摘要:题意:有一组序列$a=[a_0,a_1,...,a_]$,每次操作得到一组新序列$b=[b_0,b_1,...,b_]$,\(b[i]=gcd(a_i,a_{(i+1)\mod n})\),问你最少操作几次可以是新序列所有元素相等. 题解:所有元素相等,即最后所有$b_i=gcd({a_0,a_1, 阅读全文
posted @ 2021-07-25 16:44 _Kolibri 阅读(50) 评论(0) 推荐(0)
摘要:题意:RT 题解:可以自己在纸上画画看,对于位置$i$的数$a[i]$,假如它目前的逆序对数为$c[i]$,进行一次冒泡排序后,它前面最大的一个数必然会移动到它的后面去,所以可以推广到:冒泡排序$k$次后,逆序对个数变为$c[i]-k$.那么对某一状态的排列冒泡$k$次后,逆序对个数$\le k$的 阅读全文
posted @ 2021-05-07 11:35 _Kolibri 阅读(95) 评论(0) 推荐(0)
摘要:题意:区间更新,区间询问. 题解;对于区间更新,我们还是用差分数组$b_i$来更新,区间询问时,我们的答案是:\(\sum_{i=l}^{r}\sum_{j=1}^{i}b_j\), 所以,我们搞两个树状数组维护$b_i$和$i*b_i$即可. 代码: #define int long long i 阅读全文
posted @ 2020-11-16 21:59 _Kolibri 阅读(99) 评论(0) 推荐(0)
摘要:题意:在二维坐标轴上给你一些点,求出所有由三个点构成的v和∧图案的个数. 题解:因为给出的点是按横坐标的顺序给出的,所以我们可以先遍历然后求出某个点左边比它高和低的点的个数(这个过程简直和用树状数组求逆序对的操作一模一样好不好!),用$grt[i]$记录第$i$个点左边比它大的数,$low[i]$表 阅读全文
posted @ 2020-11-16 21:45 _Kolibri 阅读(87) 评论(0) 推荐(0)
摘要:题意:给你一个字符串,每次可以调换现字符串的相邻两个字符,问最少操作多少次使得这个字符串等于其反转过来的字符串. 题解:先考虑字符串中没有相同字符的情况,那么我们每次将目前字符串的最后一个字符一直调换到前面就行,如果出现相同字符的话,先让最靠前的字符调换到对应位置一定是最优的.我们先记录原字符串中每 阅读全文
posted @ 2020-11-06 10:24 _Kolibri 阅读(73) 评论(0) 推荐(0)
摘要:题意:有$n$个数,起始值均为$0$,进行$q$次操作,每次输入三个数,如果第一个数为$1$,则将第$i$个数修改为$j$,如果为$2$,则求区间$[l,r]$内的所有子区间的异或和. 题解:在纸上写一写画一画,能够发现规律,如果区间的左端点$l$和右端点$r$奇偶性不同,那么这个区间内的所以子区间 阅读全文
posted @ 2020-10-21 19:48 _Kolibri 阅读(153) 评论(0) 推荐(1)
摘要:题意:有一个长度为$n$的数组,进行$m$次操作,每次读入一个值$t$,如果$t=1$,则将区间$[l,r]$的数字反转,若$t=2$,则查询下标为$i$的值. 题解:树状数组的板子题,但是考察到了位运算的知识,我们对区间进行反转的时候,只需要对树状数组$c[l]$ ^ 1,\(c[r+1]\) ^ 阅读全文
posted @ 2020-10-21 19:32 _Kolibri 阅读(124) 评论(0) 推荐(0)
摘要:题意:给你一组数,询问$q$次,问所给区间内的最大值和最小值的差. 题解:经典RMQ问题,用st表维护两个数组分别记录最大值和最小值然后直接查询输出就好了 代码: int n,q; int a[N]; int dp1[N][30],dp2[N][30]; int lg[N]; void lg_Ini 阅读全文
posted @ 2020-10-21 19:20 _Kolibri 阅读(104) 评论(0) 推荐(0)