随笔分类 -  树状数组

摘要:传送门 首先考虑怎么算 $f(n)$ (就是题目里面那个 $f(n)$) 发现可以构造一组序列大概长这样: ${1,3,2,6,5,4,10,9,8,7,15,14,13,12,11,...,n(n+1)/2,n(n+1)/2-1,n(n+1)/2-2...n(n+1)/2-(n-1),(n+1)( 阅读全文
posted @ 2019-10-24 11:32 LLTYYC 阅读(194) 评论(0) 推荐(0)
摘要:传送门 注意到矩形往上是无限的,考虑把点按 $y$ 从大到小考虑 对于枚举到高度为 $h$ 的点,设当前高度大于等于 $h$ 的点的所有点的不同的 $x$ 坐标数量为 $cnt$ 那么对于这一层高度 $h$ 我们就有 $cnt(cnt+1)/2$ 种不同的 $l$,$r$ ,使得矩形内点集不同 发现 阅读全文
posted @ 2019-09-29 11:40 LLTYYC 阅读(241) 评论(0) 推荐(0)
摘要:传送门 看到 $n<=5000$,直接暴力枚举左右两条竖线 然后考虑怎么计算高度在某个范围内,左端点小于等于某个值,右端点大于等于某个值的横线数量 直接用权值树状数组维护当前高度在某个区间内的横线数量 考虑先固定左边的竖线,然后枚举从左到右枚举右边的竖线,那么随着右边竖线的右移,合法的横线(右端点大 阅读全文
posted @ 2019-09-27 14:49 LLTYYC 阅读(288) 评论(0) 推荐(0)
摘要:传送门 挺显然的一题?单点修改,前缀和数组前缀查询 树状数组就可以维护了 考虑每个位置对应询问的贡献,设询问的位置为 $x$,对于原数组 $a[i]$ 的某个位置 $i$,它会贡献 $(x-i+1)*a[i]$ 即 $x*a[i]-(i-1)*a[i]$,直接对两个部分搞两个树状数组分别维护即可 具 阅读全文
posted @ 2019-09-11 13:43 LLTYYC 阅读(163) 评论(0) 推荐(0)
摘要:传送门 看到题目一眼 $cdq$ 分治,然后发现 $n,m$ 很小,感到一丝不对劲 然后去看看题解发现正解是二维树状数组 二维树状数组和一维的好像也差不多? struct BIT { int t[N][N]; inline void add(int x,int y,int v) { for(;x<= 阅读全文
posted @ 2019-09-11 13:21 LLTYYC 阅读(205) 评论(0) 推荐(0)
摘要:传送门 注意题目要求的字典序最小是指下标最小 容易想到 $dp$,但是发现正着做不好搞,考虑反过来搞 原本正着做是求最长上升子序列,反过来就变成求最长下降子序列 然后我们就可以求出以每个位置为起点的上升子序列的最大长度 然后直接贪心从前往后枚举即可,复杂度 $O(nm)$ 维护最长下降子序列我是用树 阅读全文
posted @ 2019-08-31 13:41 LLTYYC 阅读(164) 评论(0) 推荐(0)
摘要:传送门 A. XORinacci 手玩三四项发现序列就是 $a,b,a\ xor\ b,a,b,...$,直接输出即可 #include<iostream> #include<cstdio> #include<algorithm> #include<cstring> #include<cmath> 阅读全文
posted @ 2019-08-26 09:47 LLTYYC 阅读(210) 评论(0) 推荐(0)
摘要:传送门 考虑 $dp$ ,发现之前的 $-1$ 可能会产生贡献不好处理 贪心一下发现每个位置填的数必须单调不减,所以就不用考虑之前填的数 设 $f[i][j]$ 表示当前考虑到第 $i$ 个位置,填的数为 $j$ 时的最小代价 那么有 $f[i][j]=f[pre][k]+val[i][j],k<= 阅读全文
posted @ 2019-08-24 16:11 LLTYYC 阅读(195) 评论(0) 推荐(0)
摘要:A. There Are Two Types Of Burgers 题意: 给一些面包,鸡肉,牛肉,你可以做成鸡肉汉堡或者牛肉汉堡并卖掉 一个鸡肉汉堡需要两个面包和一个鸡肉,牛肉汉堡需要两个面包和一个牛肉 求能得到的最多的钱 直接贪心,哪个比较贵就选哪个做,剩下的材料再做另一个 #include<i 阅读全文
posted @ 2019-08-23 07:47 LLTYYC 阅读(308) 评论(0) 推荐(0)
摘要:传送门· 对于询问 $(a,b)$ ,感觉一维很不好维护,考虑把询问看成平面上的一个点,坐标为 $(a,b)$ 每个坐标 $(x,y)$ 的值表示到当前 $x$ 和 $y$ 联通的时间和 考虑一个修改的贡献,它其实就是把左边一段区间 $[l,x]$ 和右边一段区间 $[x+1,r]$ 联通或断开 放 阅读全文
posted @ 2019-08-18 08:16 LLTYYC 阅读(268) 评论(0) 推荐(0)
摘要:传送门 考虑如果能确定每个鞋子最终交换到的位置,那么答案容易算出 具体地,如果原位置为 $i$ 的鞋子要交换到 $pos[i]$ 那么最终答案就是 $pos$ 的逆序对数量 如果不懂可以先去写 NOIP2013火柴排队 我的题解也有关于这个的证明 考虑怎么确定最优的方案,容易想到每个鞋子都找离它最近 阅读全文
posted @ 2019-08-17 11:53 LLTYYC 阅读(509) 评论(0) 推荐(0)
摘要:传送门 显然有一个想法,把 $A,B$ 从小到大一一对应,这样距离最小,证明的话好像挺显然的 设 $A_i<A_{i+1}$ ,$B_{i}<B_{i+1}$,那么如果 $A_i$ 对应 $B_i$,$A_{i+1}$ 对应 $B_{i+1}$ 距离为 $(A_i-B_i)^2+(A_{i+1}-B 阅读全文
posted @ 2019-08-17 10:45 LLTYYC 阅读(179) 评论(0) 推荐(0)
摘要:传送门 暴力怎么搞,维护前缀和 $s[i]$ ,对于每一个 $s[i]$,枚举所有 $j\in[0,i-1]$,看看 $s[i]-s[j]$ 是否属于 $[L,R]$ 如果属于就加入答案 $s[i]-s[j]\in[L,R]$ 等价于 $s[i]-s[j] \geqslant L , s[i]-s[ 阅读全文
posted @ 2019-07-12 12:16 LLTYYC 阅读(222) 评论(0) 推荐(0)
摘要:传送门 矩阵内点数显然可以预处理前缀和然后简单容斥一下 具体就是设 $sum[i][j]$ 表示以 $(i,j)$ 为右上角,以 $(0,0)$ 为左下角的矩阵的点数 那么对于询问以 $(xa,ya)$ 为左下角,以 $(xb,yb)$ 为右上角的矩形点数 注意到询问区间是闭的,显然答案就是 $su 阅读全文
posted @ 2019-07-11 14:22 LLTYYC 阅读(219) 评论(0) 推荐(0)
摘要:传送门 区间第 $K$ 小,直接树套树 外层树状数组维护区间,内层权值线段树维护排名 和正常的权值线段树类似,查询第 $K$ 小时也是在线段树上二分,但是此时不是两颗线段树作差,而是树状数组上的 $2log_n$ 个线段树作差 跳的话就 $2log_n$ 个节点一起跳就好了 要记得离散化 阅读全文
posted @ 2019-04-07 12:47 LLTYYC 阅读(163) 评论(0) 推荐(0)
摘要:传送门 设 $val[i]$ 为位置 $i$ 的值 维护 $ansL[i]$ 表示位置 $i$ 的数左边所有大于 $val[i]$ 的数的数量 维护 $ansR[i]$ 表示位置 $i$ 的数右边所有小于 $val[i]$ 的数的数量 考虑先求出一开始总的逆序对数 $ans$ 每次删除一个数 (位置 阅读全文
posted @ 2019-03-25 19:53 LLTYYC 阅读(228) 评论(0) 推荐(0)
摘要:传送门 显然的 $dp$ 设 $f[i]$ 表示点击第 $i$ 个音符时的最大价值,$t[i]$ 表示音符 $i$ 的准备时间 那么可以枚举 $1$ 到 $i-t[i]$ 的所有音符,如果 $j$ ,如果 $j+t[j]$ 小于等于 $i$ ,那么 $f[i]=max(f[i],f[j]+t[i]* 阅读全文
posted @ 2019-03-07 16:24 LLTYYC 阅读(261) 评论(0) 推荐(0)
摘要:传送门 感觉题意有坑 害我看了半天 题目原文: 一块墓地的虔诚度是指以这块墓地为中心的十字架的数目。一个十字架可以看成中间是墓地,墓地的正上、正下、正左、正右都有恰好k棵常青树。 本来以为要刚好 k 颗,不能多了 结果看着样例一脸懵逼 才发现多的可以不管 比如有一行有 a 颗树,那么从这 a 颗中随 阅读全文
posted @ 2018-09-28 22:35 LLTYYC 阅读(178) 评论(1) 推荐(1)
摘要:传送门 DP 十分显然的DP,但是不好写 设 f[ i ] 表示以第 i 个数作结尾时的方案数,原序列为 a 如果不考虑相同的序列: 那么转移就是 Σ f[ j ] (0< j < i && a [ j ] < a [ i ]) 复杂度为 O(n^2) 考虑优化: 先去重 ,得到数组 b 每次把f 阅读全文
posted @ 2018-09-15 17:29 LLTYYC 阅读(231) 评论(0) 推荐(0)