
数据结构 | 线段树
A_Thinking_Reed_
QQ:1170827744
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
线段树的各种题目
目录类型:单点更新、区间查询题目:敌兵布阵——https://vjudge.net/contest/285952#problem/A题目:I hate it——https://vjudge.net/contest/285952#problem/B题目:Balanced Lineup——https://vjudge.net/contest/285952#problem/E类型...原创 2019-03-16 10:46:08 · 864 阅读 · 0 评论 -
codeforces-567-D: One-Dimensional Battle Ships(Set | 权值线段树)
题目:http://codeforces.com/problemset/problem/567/D题意:n个位置,k条船,每条占a个连续位置,任意两条船不能重叠或相邻,每次破坏一个位置,问破坏几次后放不下k条船。思路:对于i条船,至少需要 i*k+ i-1 个连续的位置才可以放下,对于一段长len的连续位置有等式i*k + i-1 <= len,至多可以放(len+1)/(a+1...原创 2019-09-10 11:58:29 · 279 阅读 · 0 评论 -
codeforce/652/D Nested Segments (权值线段树)
题目:http://codeforces.com/problemset/problem/652/D题意:给n个片段,求每个片段内完全包含的段的个数。思路:先按左端点排序,每次找右边的小于当前数的个数即为答案,从右向左每次查找更新即可。由于数据太大,离散化。代码:#include <bits/stdc++.h>#define ls rt<<1#defin...原创 2019-08-06 17:02:04 · 239 阅读 · 0 评论 -
HDU6606 Distribution of books (dp+二分答案+权值线段树)
题目:http://acm.hdu.edu.cn/showproblem.php?pid=6606题意:n个数取前若干数,分成k段,使分到的段和的最大值最小。思路:要求最大值最小,考虑二分答案。对答案x,设dp[i]表示将前i个数分成k份的方案数,有dp[i] = max(dp[j])+1,满足sum[i]-sum[j]<=x(sum[i]为前缀和)。由于n<=2e5,必然不能...原创 2019-08-10 10:31:05 · 195 阅读 · 0 评论 -
HDU6609 Find the answer (权值线段树)
题目:http://acm.hdu.edu.cn/showproblem.php?pid=6609题意:对第i个数a[i],删去最少的数,使它的前缀和不超过m,询问最少删数个数。思路:题意转换成在i之前选尽量多的数,使所有数的和不超过 m-a[i] 。权值线段树维护数字个数和区间和即可。#include <bits/stdc++.h>#define ls rt<&...原创 2019-08-04 14:49:30 · 213 阅读 · 0 评论 -
codeforce/722/C 线段树合并
题目:http://codeforces.com/problemset/problem/722/C题意:每次在序列中删去一个数,求每次删去后序列中最大片段和。思路:线段树合并#include <bits/stdc++.h>#define LL long long#define lson rt<<1#define rson rt<<1|1us...原创 2019-08-02 14:35:27 · 178 阅读 · 0 评论 -
nowcoder RMQ (线段树 区间位运算)
题目:https://ac.nowcoder.com/acm/contest/283/J?&headNav=acm题意:两种操作,查询区间和、区间每个值都与 x 做或运算。思路:数据范围<2^20, 建立20棵线段树,每棵维护二进制的某一位即可。注意一个优化:区间修改时,当递归到的当前区间已经全为1,可以直接停止递归。类似题目:codeforce-242-E区间异或运算...原创 2019-09-09 19:39:26 · 362 阅读 · 0 评论 -
codeforce-242-E: XOR on Segment ( 线段树 按位异或)
题目:http://codeforces.com/problemset/problem/242/E题意:两种操作,区间求和、区间异或上一个值。思路:a[i]<=1e6<2^20,建二十棵线段树,每一位对应一棵线段树。线段树维护区间1的个数,当区间异或的值的第i位是1,则修改第 i 棵树,tag[rt] ^= 1,a[rt] = r-l+1-a[rt](因为异或1时,1变成0,0...原创 2019-09-09 19:38:34 · 320 阅读 · 0 评论 -
codeforce 284-C Cows and Sequence(线段树)
题目:http://codeforces.com/problemset/problem/284/C题意:初始序列只有一个0元素。三种操作1:前x个数加y,2:后面添加一个y,3:弹出最后的数。每次操作后询问数列的平均值。思路:线段树,区间加,单点修改。注意边界,刚开始2e5一直错,2e5+5就过了。代码:#include <bits/stdc++.h>#define...原创 2019-08-28 23:38:08 · 289 阅读 · 0 评论 -
牛客暑期训练第一场Point Division(线段树维护dp)
题目:https://ac.nowcoder.com/acm/contest/881/I题意:二维平面有n个点(x, y),每个点有权值(a, b),将所有点分成两个集合A,B,A中元素的贡献是ai,B中元素的贡献是bi,数量随意分配,且要满足条件:A中不能存在一个点(xi, yi)和B中的任意一个点(xj, yj)满足xi>=xj && yi <= yj。求所有元...原创 2019-08-24 17:37:41 · 152 阅读 · 0 评论 -
HDU-6602 Longest Subarray(线段树)
题目:http://acm.hdu.edu.cn/showproblem.php?pid=6602题意:数列中的数最大为c,求数列的最长子串,满足子串中的数字出现至少 k 次或0次。思路:枚举子串右端点,对于当前数来说,满足出现至少k次或0次的左端点有范围[1, lastk[i]](k次及以上), [last[i]+1, i-1](0次),每次将满足条件的区间+1,最后找最左端的 c。每次...原创 2019-08-13 20:58:51 · 170 阅读 · 0 评论 -
nowcoder Find the median (线段树+区间离散化)
题目:https://ac.nowcoder.com/acm/contest/887/E题意:先给一个空集合,每次向其中放入 [l, r] 范围内的所有数后查询当前中位数。 1<= l, r <= 1e9思路:若 l, r 的范围不大,可以直接上线段树,每次进行区间加维护个数即可,由于数据范围大,采用离散化,每个节点代表一段范围,并且节点表示的范围之间无交叉。多写了一个len数...原创 2019-08-11 14:52:10 · 198 阅读 · 0 评论 -
洛谷P45163 小白逛公园 (线段树,区间最大子段)
题目:https://www.luogu.org/problem/P4513题意:操作1:每次查询[l, r]内的最大子段和,操作2:修改a[x] 为 y。思路:线段树维护,注意查询时值的返回。代码:#include <bits/stdc++.h>#define LL long long#define ls rt<<1#define rs rt<...原创 2019-08-07 20:23:24 · 246 阅读 · 0 评论 -
hdu6638 Snowy Smile (最大权值和矩阵、线段树)
题目:http://acm.hdu.edu.cn/showproblem.php?pid=6638题意:给n个点的坐标和权值,求最大权值和矩阵。思路:n<=2000,每次枚举上下边界,每次向线段树中加点,线段树维护上下边界内的最大子段和即可,要注意移动上边界时可能会有多个点在当前直线上,同样的,移动下边界时要把边界上的所有点都更新后才能更新ans。线段树维护区间最大子段和:小白逛...原创 2019-08-07 19:51:42 · 560 阅读 · 0 评论 -
权值线段树模版
pre()函数和getpre()虽类似,但是还有稍许不同,具体用时具体考虑。#include<bits/stdc++.h>#define ls rt<<1#define rs rt<<1|1using namespace std;const int maxn = 1e5+5;int T[maxn<<2];void build(i...原创 2019-09-10 17:03:51 · 188 阅读 · 0 评论