树状数组
Anxdada
多读书多看报, 少吃零食多睡觉
展开
-
新疆网络赛 G 题 Query on a string 【kmp/暴力匹配 + 树状数组 + 思维】
传送门 //题意: 给定一个字符串每次询问一个区间, 问可以匹配多少个子串. //思路: 因为子串的长度最大10. 那么每次修改最多只修改到10次. 所以我们可以直接暴力匹配就是了. 对于主串, 如果从某个开头可以匹配, 那么设那个开头的位置为1. 比如说样例就是 1000000. 这样对于询问的一个区间, 我们直接求前缀和就是了. 还有就是需要注意的几个小细节, 请看代码. 注意分清下标原创 2017-09-14 22:47:01 · 383 阅读 · 0 评论 -
POJ - 2763 Housewife Wind 【LCA + 树状数组 or 树链剖分】
传送门 题目大意: 知道了一颗有 n 个节点的树和树上每条边的权值,对应两种操作: 0 x 输出 当前节点到 x节点的最短距离,并移动到 x 节点位置 1 x val 把第 x 条边的权值改为 val 思路: 树上两个节点a,b的距离可以转化为 dis[a] + dis[b] - 2*dis[lca(a,b)] 其中 dis[i] 表示 ...原创 2018-07-31 15:54:22 · 279 阅读 · 0 评论 -
SCU - 4574 人面不知何处去, 桃花依旧笑春风 【思维 + 树状数组】
传送门题意: 给你一个正整数序列,问其中有多少个严格上升子序列?答案模上1e9+7思路: 这样的题一般算贡献. 所以我们考虑一个序列, 那么假设当前这个数字作为严格上升子序列的末尾元素, 那么此时他能造成的贡献是多少了, 实际上就是它前面比它小的每一个数造成的贡献之和. 所以我们需要求前缀和, 这里就用到了树状数组, 那么此时每一个节点更新时就不再是累加1了, 而是累加它所能构成的贡献了… 这样原创 2018-04-20 18:08:10 · 210 阅读 · 0 评论 -
CF EDU 41 E 题 Tufurama 【思维 + 树状数组】
传送门 题意: 给定n个数, 你需要找到有多少个下标二元组(x, y), 满足x < y, a[x] >= y, a[y] >= x.思路: 这道题挺有意思的, 首先我们要维护好a[y] >= x, 这个值, 即我们对x这个下标存储最大的id(id < y), 使得a[id] >= x, 这个我们就预处理好了第二个条件, 那么我们如何计数第二个条件了, 那就要用到树状数组了, 我们还要确定的一个事原创 2018-04-08 20:17:45 · 296 阅读 · 0 评论 -
HDU 5147 Sequence II 【树状数组维护信息 + 后缀和思想】
传送门 // 给定一个四元组的定义, 问在n个数中有多少个这样的四元组. 具体定义请看题目~// 那么也很明显的就是我们需要枚举中间一个值然后找旁边的两个满足的东西. 这里我枚举的是b, 那么对于一个下标i, 我们看它前面有多个比它小的, 以及后面有多少个二元组满足i < j && a[i] < a[j] , 前面那个信息很好维护就是扫一遍然后用树状数组维护下就行啦. 那么如何维护一个数后面有多少原创 2018-01-20 00:56:16 · 500 阅读 · 0 评论 -
HDU 2492 Ping pong【树状数组好题! + 思维】
传送门 // 题意: 由西向东的给定n个人的rank值, 可以相同, 然后一场比赛的举行必须是裁判的rank值和它的位置都处于要进行比赛的两个人之间, 问最多可以举行多少场比赛.// 思路: 很明显, 我们直接枚举中间位置的裁判, 所以我们需要维护几个东西就是每一个人它左边比它小的和比它大的, 右边比它小的和右边比它大的, 然后扫一遍即可出ans, 维护上面四个东西就是可以用两颗树状数组维护下就行原创 2018-01-19 16:53:12 · 328 阅读 · 0 评论 -
树状数组求逆序对/ 兼板子 (有无重复数字都可)
归并排序和树状数组都可以用nlogn的算法做到求出逆序对.但这里着重讲树状数组的原理与求法. 树状数组最常用的方面就是用来求逆序对, 普通方法需要n^2的复杂度, 而树状数组只需要用nlogn的复杂度, 所以是很好的优化, 关键在于内部函数lowbit的应用. 这是树状数组的结构图 : lowbit函数就是进行哪些实现之间的转化的, 因为这些数之间在二进制中存在着某种联系, 而lowbit函数...原创 2017-06-21 13:41:48 · 1231 阅读 · 0 评论 -
牛客练习赛7 E 题 珂朵莉的数列 【树状数组 + 思维】
传送门 //对于一个数n, 它有n*(n+1)/2个子区间, 问这些子区间的逆序对数之和.//那么这个区间问题一般都是计算贡献问题, 所以先分析问题如果有 i < j 且 a[i] > a[j] 那么区间1<= l <=i, j <= r <= n, 就是包含了这个逆序对, 也就是有i*(n-j+1)个区间. 首先数字太大需要离散化, 然后我们更新的是每一个数的位置, add(pos, i); 并原创 2018-01-17 01:26:31 · 655 阅读 · 0 评论 -
“玲珑杯”线上赛 Round #24 E 题 【思维 + 树状数组】
传送门 // 题意: 给定一个长度为n的序列, 问它的2^n个子序列的逆序对之和是多少.这道题和牛客上面一道题很相似, 牛客上面是求它的n(n+1)/2个子区间的逆序对之和. 明显这个问题依旧考虑贡献问题, 所以想一想就知道每一个逆序对的贡献就是2^(n-2)次方, 因为去除掉逆序对的那两个数, 剩下的数的任意一个子序列再加上这两个数就行啦. 所以ans 就是逆序对数 * 2^(n - 2)次方.原创 2018-01-23 00:14:20 · 331 阅读 · 0 评论 -
Wannafly模拟赛4 A 题 Laptop 【二维偏序问题 + 树状数组维护】
传送门 //这个是经典的二维偏序问题, 偏序问题也是比较难的一部分, 当上了三维以后, 就要不断用cdq分治以及一些高级数据结构来解决. 但是这道题还是比较简单的, 只是一个普通的二维偏序, 所以直接对第一维进行排序, 然后用树状数组维护第二维, 然后对于每一个插入, 我们寻找它的后缀和, (前缀和不好实现) 然后不断更新答案即可. (因为数很大, 所以需要进行离散化)AC Codeconst i原创 2017-10-21 23:22:42 · 1143 阅读 · 0 评论 -
网易互娱9.27号19点研发岗笔试题解
一共四道编程. 前两道比较简单就不说了, 主要讲讲3,4道. 第三题: 开心消消乐 就是给你个M*N的二维矩阵, 每个块有一个颜色, 如果它的四周有相同的颜色那么就是连在一起的, 每次点击一个色块(要能点击消除尽量多的, 如果有数量相同的点击编号小的)进行消除, 然后消除后上面的掉下来, 如果某一列消失了, 右边的补过来. 问最后这个矩阵还剩多少个方块… 题解: 按照题意模拟即可, 每次dfs找...原创 2019-09-28 18:49:16 · 1588 阅读 · 0 评论