
数据结构-树状数组
数论只会GCD
研二在读
展开
-
HDU 1166 树状数组
题解: 关于树状数组:树状数组AC code://lrl's submission#include<cstdio>#include<cstring>#include<string>#include<algorithm>#include<cctype>#include<vector>#include<map>#include<cmath>#include<queue>#inc原创 2016-11-17 18:39:44 · 408 阅读 · 0 评论 -
CF - 61E - Enemy is weak(树状数组)
传送门:CF 61E题解: 和求二重组逆序对, 类似, 这个是在其基础上求三重逆序对 因为每个数不同, 求两个数逆序对之后, 对于f[i]总共有n - f[i]个比他大的数, 左边已求为l[i], 那么右边就是n - f[i] - l[i] = n - i -r[i] => r[i] = f[i] + r[i] - i; r[i]为右边比f[i]小的个数AC code:#include<原创 2016-11-20 22:15:38 · 579 阅读 · 0 评论 -
Subsequences CodeForces - 597C 树状数组 + dp
传送门 : CF 579c题解 dp 状态ans[i][j] 表示前i个数,包含j个数的子序列个数有多少 f[i][j]表示前i个数,以a[i]结尾的,包含j个数的子序列有多少 dp[i][j] = dp[i-1][j] + f[i][j] 这个转移很容易想到 f[i][j] = sum f[k][j-1] 其中1<=k < i 且 a[k] < a[i] 这个转移原创 2016-12-14 13:16:08 · 521 阅读 · 0 评论 -
UVA 1513 树状数组
传送门:UVA 1513题意 给m个movie, 编号一到m, 1在上, 每次把要看的movie看完后放在最上面, 查询每次要看之前上面有几个movie题解 每次更新把上个位置去掉, 新的位置可以通过扩展数组实现, 因为r <= 100000干脆数组开两倍, 最上面的movie更新放在后面, 这样每次更新前查询就可以了AC code:/* adrui's submission原创 2016-11-25 20:20:48 · 471 阅读 · 0 评论 -
POJ 2155 树状数组
传送门:POJ 2155题意 给定一个初始全为0的n * n矩阵, 可以分块修改各项值, 查询某点当前值 修改是0->1 || 1->0题解 二维区间染色, 每次更新染色区间, 更新各点染色 然后值是染色次数奇偶性 区间染色AC code:#include<iostream>#include<cstring>using namespace std;#define d原创 2016-11-25 11:50:14 · 380 阅读 · 0 评论 -
HDU 1559 二维树状数组
传送门:HDU 1559模板题, 注意矩阵sum树状数组求和AC code:/*adrui's submission *Language : C++ *Result : Accepted *File Name: HDU 3333 *Favorite : Dragon Balls *love : yy *Standing in the Hall of Fame */#include<io原创 2016-11-23 14:56:12 · 501 阅读 · 1 评论 -
HDU 3333 树状数组(线段树) + 离散化 + 离线处理
传送门:HDU 3333题意 给定一个长为n的序列, 做m次查询, 查询结果为区间内只出现一次的数字集合之和题解 刚开始想的读入时用map映射,如果前面出现过, 线段树之前出现位置结点为0当前点原值, 没出现的话直接原值, 但是发现这样只能查询右端为当前位置左端为1的结点, 所以要先对查询做处理 查询预处理是对查询做r递增排序, 同时要有个idx对应查询下标 所以为了实现全部原创 2016-11-22 13:34:19 · 568 阅读 · 0 评论 -
HDU 1556树状数组
传送门: HDU 1556题解 树状数组模板题 区间染色 + 统计次数 向上查询, 向下统计 先把a之后的区间加一次染色更新, 再把b之后减一次染色更新, 这样[a, b]데染色更新就完成了AC code:#include<iostream>#include<algorithm>#include<cstring>using namespace std;#define l原创 2016-11-19 00:05:21 · 579 阅读 · 0 评论 -
HihoCoder 1336 二维树状数组
传送门:HihoCoder 1336题解 树状数组在二维上的扩展, 水题 要注意的是sum的时候要拆分, 因为sum是从左上角(1, 1)到(x, y)这个矩阵的sum, 所有要进行小划分 树状数组, 下标不能为0AC code:#include<iostream>#include<algorithm>#include<cstring>using namespace std;原创 2016-11-18 23:22:59 · 546 阅读 · 0 评论 -
HDU 1541 树状数组
传送门:HDU 1541题意 给定一组点,用坐标表示,求各个层次的点的数量, 每个点层次指的是其它点中x,y坐标均不大于当前点x,y坐标点的数量题解: 注意题目给出, 所有输入对于y来说都是不降序, 所以只要考虑x就可以了, y不增的时候x自增, 所以后输入的点不会影响先输入点的层次 因为计算层次的时候要排除自身, 所以要先更新当前点的层次再更新树状数组AC code:#inc原创 2016-11-18 19:53:43 · 388 阅读 · 0 评论 -
POJ 2299 树状数组求逆序对
题意 给定一组序列可转换相邻项的序列, 求让它排成非递减的最小操作数题解 就是求序列逆序对数, 但是序列最大数据较大, 数组开不出来, 所以需要现进行离散化 比如 9, 1, 0, 5, 4 ->0, 1, 4, 5, 9初始序列在排序后序列下标为5, 2, 1, 4, 3 就是把上限较大的元素集离散成500000数据量内的可执行的可求逆序对下表序列, 这样离散后元素最大为50原创 2016-11-18 15:42:17 · 465 阅读 · 0 评论 -
HDU 4630 离线处理 + 树状数组
传送门 :HDU 4630题意 给定一个大小为n的排列和m个查询, 输出每个查询区间内最大gcd 最大gcd :区间内任取两个数使其gcd最大的gcd题解 最初想的是用一个vector存储查询区间的因子信息, 维护出现>=2的因子, T就暂时没想 对于一个区间[l, r]区间内a[l], a[l + 1]…a[r]都用各自的因子, 对于出现过两次以上的因子便是该区间的最大公约数原创 2016-12-28 16:12:57 · 728 阅读 · 0 评论