ACM-树状数组|线段树
yew1eb
https://github.com/yew1eb
展开
-
hoj 2275 Number sequence(树状数组)
题意问你在序列中有多少个这样的关系式:ai ak (i 两次使用树状数组。 注意:ai可以为0!! /*This Code is Submitted by yew1eb for Problem 2275 at 2014-01-13 11:14:55*/ #include #include #define MAXA 32768 #define MAXN 50000 +原创 2014-01-13 11:19:55 · 1911 阅读 · 0 评论 -
线段树习题集
线段树习题集 大部分来源于@NotOnlySuccess 一、点修改 最最基础的线段树,只更新叶子节点,然后把信息用PushUp(int rt)这个函数更新上来 hdu1166 敌兵布阵 线段树功能:update:单点增减 query:区间求和 解题报告 hdu1754 I Hate It 线段树功能:update:单点替换 query:区间最值 解原创 2014-02-17 11:14:22 · 3855 阅读 · 0 评论 -
树状数组习题总结
TopCoder Tutorials:http://www.topcoder.com/tc?module=Static&d1=tutorials&d2=binaryIndexedTrees#prob 1、要向上统计,向下修改;一般是修改一段区间的值,查找的是某个位上的值; 2、要向上修改,向下统计;一般是修改某个位置上的值,查找的是一段区间的和; 可以用树状数组的地方,一定可以用线段树原创 2013-08-24 08:32:52 · 2402 阅读 · 0 评论 -
UVA-1400 Ray, Pass me the Dishes, LA 3938 , 线段树,区间查询
题意:给出一列数(n个),m次查询区间[l,r]的最大连续区间[x,y](l 思路:动态查询区间最大连续区间; 如果是求最大连续区间和: 用线段树维护最大连续和sum_sub、最大前缀和sum_prefix、最大后缀和sum_suffix。 root.sum_sub = max{l.sum_sub, r.sum_sub, (l.sum_suffix + r.sum_prefix)原创 2014-07-15 21:27:52 · 2005 阅读 · 0 评论 -
hdu1166 敌兵布阵
题意要求支持三个操作。 Add(i,j); //点i处增加j Sub(i,j); //点i处减少j Query(i,j); //查询区间[i,j]的和 1、树状数组 #include #include typedef int LL; const int MAXN = 50000 + 10; int C[MAXN], n;原创 2013-12-16 20:32:45 · 2136 阅读 · 0 评论 -
hdu 1823 Luck and Love ,二维线段树
Luck and Love Time Limit: 10000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 5282 Accepted Submission(s): 1324 Input 本题有多个测试数据,第一个数字M,表示接下来有连续的M个操原创 2014-08-06 12:04:09 · 1883 阅读 · 2 评论 -
Uva 11297 Census,二维线段树,板子
维护二维矩阵。 q x1, y1, x2, y2 : 查询x1 c x, y, v: 修改(x,y) = v。 矩阵大小(n,m 查询次数q #include using namespace std; const int INF = 1<<30; const int maxn = 2000 + 10; int A[maxn][maxn原创 2014-08-06 09:36:16 · 2103 阅读 · 0 评论 -
hdu4893 Wow! Such Sequence!,树状数组,线段树,单点修改,区间更新
2014 Multi-University Training Contest 3 1007题 点击打开链接 单点修改,区间更新(线段树Lazy标记) 树状数组: /* 优化: 1、用set容器记录num[i]还不是Nearest Fibonacci number的下标i, 操作三时只需要更新set中在区间内的数,num[i] -> Nearest Fibonacc原创 2014-07-30 16:21:45 · 1739 阅读 · 0 评论 -
HDU 4902 Nice boat(线段树 区间更新)
题意: 给你一个区间,每次可以进行两种操作 1:把区间中的数全都变成x 2:把区间中大于x的数变成gcd(a[i], x) 最后输出序列。(n,m 时限 15s,暴力也能过。。。。 线段树做法,区间更新,lazy标记,到需要更新的时候才更新。 num[rt] != -1,表示 区间 L[rt]~R[rt] 所有的数都相同。 #inclu原创 2014-08-05 09:43:34 · 1661 阅读 · 0 评论 -
poj3468 A Simple Problem with Integers,成段更新
http://poj.org/problem?id=3468 整段更新,整段查询 /* * 整段更新,整段查询 * PushUp(int rt) 是把当前结点的信息更新到父结点 * PushDown(int rt) 是把当前结点的信息更新到儿子结点 * 延迟标记: * 简单来说就是每次更新的时候不要更新到底,用延迟标记 * 使得更新延迟到下次需要更新or询问到的时候原创 2014-02-17 13:37:47 · 1873 阅读 · 0 评论 -
POJ 3264 Balanced Lineup,RMQ
求区间的最大值,最小值的差值。 RMQ问题 1、Sparse-Table算法,预处理时间O(nlogn),查询时间O(1) 2、线段树(略) ST算法 #include #include #include using namespace std; const int maxn = 50005; int ST_min[maxn][30], ST_max[maxn][30];原创 2014-01-18 22:35:52 · 1701 阅读 · 0 评论 -
hdu4027 Can you answer these queries? (区间修改,区间查询)
对一个区间两种操作: c x y 1、使区间[x,y]的数等于其开方数(四舍五入)。 2、查询区间[x,y]的和。 剪枝: 当一个数小于等于1时其开方数将不再变化 -------------------------------------------------------- 1、线段树 #include #include #include #include #i原创 2014-02-20 11:55:35 · 1854 阅读 · 0 评论 -
hdu1754 I Hate It
用线段树维护区间最大值,支持修改单点的值。 #include #include #include using namespace std; #define LL(x) (x<<1) #define RR(x) (x<<1|1) const int maxn = 200005; struct node { int l, r; int Max; }tree[maxn*4]原创 2014-01-18 17:56:52 · 1902 阅读 · 0 评论 -
hdu1394 Minimum Inversion Number
求Inversion的最小逆序数 先用线段树求出初序列的逆序数, 然后 每次将最后一个数,移到第一个位置 逆序数的变化 减少a[i], 增加n - 1 - a[i] 记录最小逆序数 update:单点增减 query:区间求和 #include #include using namespace std; #define LL(x) (x<<1) #define R原创 2014-01-18 17:54:08 · 1895 阅读 · 0 评论 -
hdu1556 Color the ball
Problem Description N个气球排成一排,从左到右依次编号为1,2,3....N.每次给定2个整数a b(a 简单的区间修改,单点统计。 1、离散化 ; 2、树状数组; 3、线段树 1、离散化 #include #include #define MAXN 100000 + 5 int bit[MAXN]; int m原创 2014-01-15 10:33:21 · 2020 阅读 · 0 评论 -
poj2352 Stars
简单的区间统计, 一定要注意 i可以为0的情况的存在!! (树状数组) #include #include #define N 15000 + 10 int c[32000+10]; int n, Max; inline int lowbit(int x) {return (x&-x);} void modify(int i,int d) {for(; i<=Max+1; i+=lowb原创 2014-01-13 14:36:49 · 1799 阅读 · 0 评论 -
poj 2985 The k-th Largest Group 求第K大数 Treap, Binary Index Tree, Segment Tree
题目链接:点击打开链接 题意:有两种操作,合并集合,查询第K大集合的元素个数。(总操作次数为2*10^5) Treap模板(静态数组) #include #include #include #include #include const int maxNode = 500000 + 100; const int inf = 0x3f3f3f3f; struct Tr原创 2014-05-23 09:44:20 · 2283 阅读 · 0 评论