随笔分类 - 数据结构--树状数组
摘要:题目 分析 思维要求比较高。 首先我们要把原图的逆序对q算出来。 这个树状数组或归并排序都ok(树状数组不用离散化好评) 那么翻转$[l,r]$中的数怎么做呢? 暴力过不了,我试过了。 设$ t=r-l+1 $即为区间长度 那么区间数对数量(看好是所有数对,不是逆序对)的数量就是$ k =\frac
阅读全文
摘要:题目 分析 题意:给个数列,求有多少五元上升组 考虑简化一下问题:如果题目求二元上升组怎么做。 仿照一下逆序对,用树状数组维护一下就ok了。 三元怎么做呢? 把二元的拓展一位就可以了,即把第三个也扔进树状数组 所以这题就渐渐明朗了: 用$ dp[i][x] $表示以$ A[x] $结尾的$ x $元
阅读全文
摘要:题目 分析 先敲了个树链剖分,发现无法AC(其实是自己弱,懒得debug、手写栈) 然后去学了学正解 核心挺好理解的,$ query(a) $是$ a $到根的异或和。 答案就是$ lca(x,y) \hat{} query(x) \hat{} query(b) $ 接着维护异或和,很显然线段树挺容
阅读全文
摘要:题目 分析 已经凉凉。看错数据范围敲了发莫队........ 和HH的项链差不多,把每种颜色之前的颜色到再之前的颜色这段区间 区间加。 区间加就树状数组特技 代码 #include <bits/stdc++.h> const int maxn=2e6+10; using namespace std;
阅读全文
摘要:开始学习树状数组了,还是有些小激动的。 P.s.本文持续更新 有以下问题 已知一个长为N的数列,你需要进行下面两种操作共M次: 1.将某一个数加上x 2.求出某区间每一个数的和 数据范围:N<=500000,M<=500000 怎么做呢?暴力对数组操作?这是可行的,但是N和M都大的可怕,怕是要运行到
阅读全文