数据结构-树状数组
Aoxuets
REM 是我的, 拔剑吧!
展开
-
Light OJ 1085 - All Possible Increasing Subsequences
题目link 给定一个序列, 求出上升子序列的总数。分析Dp[i] 表示序列 以 i 结尾的数目。 可知 Dp[i]=∑Dp[x]+1Dp[i] = \sum Dp[x] + 1 这是一个前缀和, 用树状数组维护。Code#include <bits/stdc++.h>using namespace std; typedef long long LL; const int maxn = 1e原创 2016-05-14 22:04:00 · 376 阅读 · 0 评论 -
Light OJ 1266 - Points in Rectangle
题目Link 就是查询矩形内有多少个点。分析二维树状数组维护就好了,。Code#include <bits/stdc++.h>const int maxn = 1000 + 131; struct Point { int x, y; }; int Num[maxn][maxn]; bool Vis[maxn][maxn];int lowbit(int x) { return x&(-x);原创 2016-05-15 09:27:51 · 435 阅读 · 0 评论 -
Light OJ 1343 - Aladdin and the Black Stones
题目link 求偶数子序列 满足 的个数。分析首先, 我们先把每一对a[i] + a[j]存起来, 这样就可以把题目的偶数个条件无视了。 设 T[i,j] = a[i] + a[j]; 因为我们是要求序列个数, 所以对于 [i,j]区间, 我们 要找出 [i,j] 内有多少对满足 T[x,y] < T[i,j] 的。 把 (i,j)想成坐标系的点, 那么上面求的就是 平面矩形 {[i,i],原创 2016-05-15 11:51:41 · 455 阅读 · 0 评论 -
LightOJ 1348 (树链剖分 + 线段树(树状数组))
题目Link分析典型的树链剖分题, 树链剖分学习资料Code#include <bits/stdc++.h>using namespace std;const int maxn = 30000 + 131; struct Edge { int Next; int To; }edge[maxn<<1]; int Head[maxn], tot, n; ///以下是重链数据定义 i原创 2016-05-17 20:15:28 · 428 阅读 · 0 评论 -
LightOJ 1372 (枚举 + 树状数组)
题目Link 输出序列中有多少个组合 {a1,a2,a3,a4,a5,a6a_1 , a_2, a_3, a_4, a_5, a_6}可以构成一个六边形。分析序列每个数都不相等。 所以可以设 a1<a2<a3<a4<a5<a6。a_1 < a_2 < a_3 < a_4 < a_5 < a_6。 把六边形分解为 4 个三角形, 又可以得出 a1+a2+a3+a4+a5>a6a_1 + a_2原创 2016-05-17 21:14:10 · 470 阅读 · 0 评论 -
Light OJ 1402 (Dp + 树状数组)
题目:[LINK](http://www.lightoj.com/volume_showproblem.php?problem=1402) 给你一些点(SRT, R); 按照SRT排序, 然后再坐标系中画出这些点, 连成一条线。 线会有峰点(peak),一个点是峰点, 相邻两个点的 R 值都比它小 或 大。 然后WARush 要丧病的忽略一些点,(忽略第X点后,第 X 后面的点会前移! ) 会形成原创 2016-05-20 15:48:17 · 423 阅读 · 0 评论