![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
-----线段树
litmxs
博客内容如有错误,还望指正
展开
-
K-th Number POJ - 2104 平方分割/线段树
题目链接:K-th Number POJ - 2104题目大意,大小为n的数列a1-an,m次询问,格式为i,j,k,意思是ai-aj中第k小的数。(n<1e5,m<5e3)挑战程序设计竞赛上的两种解法。核心思路都是一样的,设计某种一个数据结构,能快速求出i-j中小于等于x的元素个数,然后二分答案。平方分割: 将n个元素分成sqrt(n)个部分,每个部分内部都拍好了序,这样一个完整部分内部小于等于原创 2017-03-28 20:54:25 · 646 阅读 · 0 评论 -
牛客网暑期ACM多校训练营(第五场)F take 线段树 概率
题目链接: F take题目大意有n个箱子, 每个箱子里面有p[i]/100的概率有一个大小为d[i]的钻石 一开始你手上的钻石大小为0, 你从第一个箱子开始, 依次打开每一个箱子, 如果箱子里面的钻石大小比你手上的大, 那就拿起箱子里的钻石替换自己的, 求最后替换次数的期望思路考虑第i次开箱子, 箱子里钻石比你手上的大的概率为, 当前钻石比d[i]小的概率*开箱子开出钻石的...原创 2018-08-02 19:03:39 · 218 阅读 · 0 评论 -
牛客网暑期ACM多校训练营(第四场)J Hash Function 拓扑排序 线段树
题目链接: J Hash Function题目大意一张hash表,长度为n,哈希函数为hash(x) = x mod n,如果有冲突,则位置向后移一位(n-1的下一位是0) 现在给你一张hash表,要求出字典序最小插入顺序思路如果a[i]%n != i,说明在a[i]插入前,a[i]%n到i-1所在的位置已经被占用了,也就是说区间[a[i]%n, i-1]中的数字必须在a...原创 2018-07-30 09:58:29 · 251 阅读 · 0 评论 -
2018 Multi-University Training Contest 2 1007 Naive Operations 线段树 区间更新区间查询
题目链接:1007 Naive Operations题目大意两个数组a和b, 长度为n,a一开始全都是0,b里面是1-n的排列 有两两种操作 add l, r : 将a数组[l, r]内所有元素+1 query l, r : 求∑ri=l⌊aibi⌋∑i=lr⌊aibi⌋\sum_{i = l}^{r} \lfloor \frac{a_i}{b_i} \rfloor思路线...原创 2018-07-25 17:33:20 · 131 阅读 · 0 评论 -
Aragorn's Story HDU - 3966 树链剖分 点权 区间更新 单点查询 模板
题目链接:HDU - 3966题目大意一棵树,结点数为n(n&lt;=5e5),有两种操作,将结点c1和c2路径上所有结点的权值增加或减少k,查询结点c的权值思路树链剖分,用BIT(树状数组)进行更新和查询思路 Result Time(ms) Mem(MB) Length Lang Accepted 967 16.7 244...原创 2018-07-18 09:36:58 · 171 阅读 · 0 评论 -
Query on a tree SPOJ - QTREE 树链剖分 模板
题目链接:Query on a tree题目大意一棵树,有n个节点n<=1e4, 有两种操作:1.求节点a和b之间路径的最大权值的边;2. 将边i的权值改为ti思路树链剖分,边的权值存在儿子节点上,线段树求区间值和修改代码#include <bits/stdc++.h>using namespace std;typedef long lon...原创 2018-07-17 16:35:50 · 156 阅读 · 0 评论 -
Codeforces Round #442 (Div. 2) 877 E. Danil and a Part-time Job DFS序 线段树
题目链接: E. Danil and a Part-time Job题目大意一棵有根树, 每个节点可以是1或者0, 两种操作: 1. pow v: 将v节点的子树中所有节点的值反置(1变0, 0变1, 相当于异或1) 2. get v: 输出v节点的字数中1的个数 节点个数: 1≤n≤2⋅1051 \leq n \leq 2 \cdot 10^5, 操作次数: 1≤q≤2⋅1051 \leq原创 2017-10-26 00:10:18 · 248 阅读 · 0 评论 -
Codeforces Round #439 (Div. 2) E. The Untended Antiquity hash+二维树状数组或二维线段树
题目链接: E. The Untended Antiquity题目大意一个n*m的网格, 有三种操作, 一是将包含(x1, y1)(x2, y2)两点的最小矩形套上障碍, 二是将某个障碍取消, 三是查询点(x1, x2)(y1, y2)之间是否能直接到达(之间没有障碍)思路题解的思路非常6 利用二维线段树, 对于每个障碍对应一个随机的hash值, 然后操作一则让所有矩形内所有点都加上这个值, 操作原创 2017-11-12 21:53:51 · 206 阅读 · 0 评论 -
Mosaic HDU - 4819 二维线段树 模板
题目链接:Mosaic HDU - 4819题目大意一个n*n的矩阵, 让你求其中一个矩形区域中的最大值和最小值, 并更新其中的一个位置的值思路二维线段树代码#include <cstdio>#include <cstring>#include <iostream>#include <algorithm>#include <set>#include <queue>#include <ve原创 2017-11-12 17:56:07 · 304 阅读 · 0 评论 -
树状数组模板
单点更新相比于线段树, 好写的多 下标从1开始, sum(k)返回区间[1, k]的值, update将位置p的值+x 复杂度都是O(logn)O(log^n)int bit[maxn], n;inline int lowbit(int x) { return x&(-x); }inline void init(int n) { memset(bit, 0, sizeof(int) * (n原创 2017-10-15 17:09:45 · 258 阅读 · 0 评论 -
ST表模板
ST表效率比线段树高, 可以查询区间最值, 但不能实时更新mi[i][j]代表从i开始, 往后2^j个元素的最小值, 也就是区间[i, i+2^j-1]的最小值 预处理时利用mi[i][j-1] 和 mi[i+(1<<(j-1))][j-1]更新mi[i][j] 查询是也是通过两段相互重合的比要查询区间小一点的区间得到最小值 复杂度预处理O(nlogn)O(nlog^n), 查询O(logn)原创 2017-10-15 17:18:48 · 298 阅读 · 0 评论 -
GYM - 101572G Galactic Collegiate Programming Contest 离散化 + 线段树或树状数组
题目链接: GYM - 101572题目大意一场比赛, 每个队伍的分数由(a, b)组成, a是做题数量, b是总罚时, 题量多的排名前, 相同题量罚时少靠前, 如果题量罚时都相同, 排名一样, 例如, (1, 1), (1, 1), (0, 0)三支队伍排名为1, 1, 2 现在有n支队伍, m个事件, 每个事件由(t, p)组成, 代表队伍t以罚时p做出了一题 让你输出每个事件后, 队伍1的原创 2017-10-15 16:56:17 · 763 阅读 · 0 评论 -
HDU - 1542 线段树扫描线 notonlysuccess风格
线段树扫描线, 离散化写成notonlysuccess风格爽多了…#include <iostream>#include <algorithm>#include <cstdio>#include <cstring>#define ls l, m, rt<<1#define rs m+1, r, rt<<1|1#define defm int m = (l+r)>>1using namesp原创 2017-04-15 16:45:30 · 292 阅读 · 0 评论 -
HDU - 4553 线段树区间合并
线段树区间合并, 三种命令, D t: 请求一段长度为t的连续区间, 返回区间开始位置; N t: 同上, 但如果没有符合要求, 则忽略之前D的请求再寻找; S t1, t2: 清空[t1, t2];维护两个区间合并的线段树, 因为两个线段树功能都是一样的, 所以不需要写双份的代码了, 函数增加一个参数用以表示是哪个线段树;太久没写了, 写完后WA了, 因为一个rt手抖写成了rt<<1, 一个地方原创 2017-04-15 16:37:02 · 407 阅读 · 0 评论 -
Billboard HDU - 2795 线段树
题目链接:Billboard HDU - 2795 题目大意:一块公告板,高h,宽w,每块公告高度固定为1,宽度wi,总共n个公告,依次往上贴,每次选择最上面、最左边的位置,每给出一个公告,输出它所在的高度,如果贴不下,输出-1 使用线段树,存储每行剩余的宽度,维护区间最大值,利用线段树的性质,从左往右选择第一个满足剩余宽度大于公告宽度的#include<iostream>#include<a原创 2017-03-24 23:36:27 · 319 阅读 · 0 评论 -
ACM-ICPC 2018 焦作赛区网络预赛 E. Jiu Yuan Wants to Eat 树链剖分 线段树
题目链接:Jiu Yuan Wants to Eat题目大意一颗树,n各节点(n≤105n≤105n \leq 10^5)每个节点上有一个值aiaia_i(ai≤264)ai≤264)a_i \leq 2^{64}) 有四种操作 1. 将u到v路径上所有节点值乘以x(x≤264)x≤264)x \leq 2^{64}) 2. 将u到v路径上所有节点值加上x(x≤264)x≤264...原创 2018-09-15 18:07:36 · 299 阅读 · 0 评论