
数据结构 - 线段树
文章平均质量分 68
TaoSama
The ACM road begins.
展开
-
POJ 2886 Who Gets the Most Candies? (三种姿势点草动态求第k大)
Who Gets the Most Candies?题意: N个孩子顺时针坐成一个圆圈且从1到N编号,每个孩子手中有一张标有非零整数的卡片。第K个孩子先出圈,如果他手中卡片上的数字A大于零,下一个出圈的是他左手边第A个孩子。否则,下一个出圈的是他右手边第(-A)个孩子。第p个出圈的孩子会得到F(p)个糖果,F(p)为p的因子数。求得到糖果数最多的是哪个孩子及得到多少糖果。思路:模拟原创 2015-06-17 02:19:48 · 750 阅读 · 0 评论 -
POJ 3255 Help with Intervals (线段树区间更新)
题意: 给定一个一开始是空集 给出一些集合操作 求最后得到的集合 (按照右端点升序排列输出)分析: 把每个操作转化成对线段的操作 可以将其中的一些操作分解成其他操作 这里给出一种机智的实现办法 分解那种可以自己写写也是比较容易的代码://// Created by TaoSama on 2015-09-18// Copyright (c) 2015 Tao原创 2015-09-18 22:33:54 · 450 阅读 · 0 评论 -
ZOJ 3637 Education Manage System (dp+线段树)
题意: 求不相交区间最大权值和求不相交区间最大权值和分析: 有权值了嘛,就不能贪心了嘛,就dp嘛,输入处理蛋疼,注意闰年,注意结束时间+5有权值了嘛, 就不能贪心了嘛, 就dp嘛, 输入处理蛋疼, 注意闰年, 注意结束时间+5 然后不相交区间,很显然的做法就是按照结束时间排序,然后把开始时间st和结束时间ed都转化成分钟不过6e5才 然后不相交区间, 很显然的做法就是按照结束时间排原创 2015-10-09 02:36:34 · 509 阅读 · 0 评论 -
ZOJ 3633 Alice's present (脑洞题)
题意: N<=5×105的序列,Q<=5×104,每次查询[l,r]从右往左第一个重复元素,没有输出OKN<=5×10^5的序列, Q <= 5×10^4,每次查询[l,r]从右往左第一个重复元素, 没有输出OK分析: 找出每个数最近一次出现的位置记为l[i],没出现l[i]=0找出每个数最近一次出现的位置记为l[i],没出现l[i] = 0 如1,3,3,2,4,4 l数组就是原创 2015-10-09 02:30:04 · 495 阅读 · 0 评论 -
SPOJ Query on a tree (树链剖分 + 线段树)
题意: 一棵N(N<=10000)个节点的树,每条边都有一个权值,要求进行两种操作一棵N(N<=10000)个节点的树,每条边都有一个权值,要求进行两种操作 CHANGE i ti:改变第i条边的权值为tiCHANGE\ \ i\ t_i: 改变第i条边的权值为t_i QUERY a b:询问节点a和节点b之间的路径中权值最大的边的权值QUERY\ \ a\ b:询问节点a和节点原创 2015-10-09 20:10:30 · 482 阅读 · 0 评论 -
AOJ 2450 Do use segment tree (树链剖分 + 线段树区间合并)
题意: 一颗N<=2×105的树,Q<=105,两种操作一颗N<=2×10^5的树, Q <= 10^5, 两种操作 1 u v c,将u−>v路径上的点权变为c1\ u\ v\ c, 将u->v路径上的点权变为c 2 u v c,查询u−>v路径上的最大连续点权和,c卖萌的2\ u\ v\ c, 查询u->v路径上的最大连续点权和, c卖萌的分析: 就是一个树链剖分+线段树区原创 2015-10-10 03:20:54 · 591 阅读 · 0 评论 -
矩形面积并、矩形面积交、矩形周长并(线段树、扫描线总结)
HDU 1542 [POJ 1151] Atlantis (矩形面积并)题意: 求N<=100个矩形的面积并求N<=100个矩形的面积并分析: 离散化: 这些技巧都是老生常谈的了, 不然浮点数怎么建树, 离散化xx坐标就可以了 扫描线: 首先把矩形按yy轴分成两条边, 上边和下边, 对xx轴建树, 扫描线可以看成一根平行于xx轴的直线. 从y=0y=0开始往上扫, 下边表示要计原创 2015-10-05 01:24:45 · 11734 阅读 · 3 评论 -
POJ 2528 Mayor's posters (区间离散化、线段树区间染色)
题意: 贴海报 后贴的会覆盖前面 求从Front能看到几张海报分析: 区间离散化之后 就是一个裸的区间染色啦 套用线段树区间更新就可以搞啦代码://// Created by TaoSama on 2015-09-16// Copyright (c) 2015 TaoSama. All rights reserved.////#pragma comment(link原创 2015-09-18 22:26:25 · 682 阅读 · 0 评论 -
BestCoder Round #65 C. ZYB's Premutation(线段树求第k大)
题意: 给定[1,i]前缀逆序对数,还原原始序列给定[1,i]前缀逆序对数, 还原原始序列分析: 先把前缀和还原成原来的,考虑倒着来,每个就相当于前面有多少个比自己大,线段树求第k大就好了,BIT什么的也可以先把前缀和还原成原来的, 考虑倒着来, 每个就相当于前面有多少个比自己大, 线段树求第k大就好了, BIT什么的也可以代码://// Created by TaoSama on原创 2015-12-06 01:39:43 · 554 阅读 · 0 评论 -
UVALive 6838 Flipping Parentheses (线段树)
题意: 给定括号序列,翻转某一个,求需要对应翻转的最左边的那个给定括号序列, 翻转某一个, 求需要对应翻转的最左边的那个分析: 经典思路,将括号转化为+1 −1的前缀和序列,对于寻找左括号可以考虑用线段树二分来寻找最左边的≥2的位置经典思路, 将括号转化为+1\ −1的前缀和序列, 对于寻找左括号可以考虑用线段树二分来寻找最左边的≥2的位置 对于每次修改要+2 −2对于每次修改要+2原创 2015-12-06 04:12:48 · 438 阅读 · 0 评论 -
Educational Codeforces Round 6 E. New Year Tree(dfs序线段树)
题意: 给定N≤4×105的一颗树,Q≤4×105次询问给定N\le 4\times10^5的一颗树, Q\le 4\times10^5次询问 1.把u这颗子树的颜色全部变成c,c≤601. 把u这颗子树的颜色全部变成c,c\le 60 2.查询u这颗子树内有多少种不同的颜色2. 查询u这颗子树内有多少种不同的颜色分析: 首先根据dfs序,树形转线形,由于c只有60,然后每个节原创 2016-01-27 16:23:16 · 437 阅读 · 0 评论 -
Codeforces #321 E. Kefa and Watch (线段树、哈希)
题意: 给定数字序列 2种操作 1. 将[l,r]区间数字变成c 2. 查询[l,r]区间数字串是不是周期为d的串 x is called a period of string s (1 ≤ x ≤ |s|), if si = si + x for all i from 1 to |s| - x.分析:原创 2015-09-23 21:07:47 · 1018 阅读 · 2 评论 -
线段树小结
线段树小结 A Summary for Segment Tree线段树小结\ A\ Summary\ for\ Segment\ Tree0. Anouncement0.\ Anouncement 本文部分图片以及部分内容来自互联网,内容过多就不一一注明出处了,冒犯之处还请海涵。本文部分图片以及部分内容来自互联网,内容过多就不一一注明出处了,冒犯之处还请海涵。 Some of the原创 2015-12-10 21:39:23 · 1272 阅读 · 0 评论 -
HDU 5634 Rikka with Phi(暴力、线段树)
题意: 给定N,M≤3×105,N为序列长度,M为操作数,保证任意时刻序列值Ai≤107给定N, M\le 3\times10^5, N为序列长度, M为操作数,保证任意时刻序列值A_i\le10^7 1 l r:对所有区间[l,r]中的整数i,把Ai变成φ(A[i])(指欧拉函数)1\ l\ r:对所有区间[l,r]中的整数i,把A_i变成φ(A[i])(指欧拉函数) 2 l r原创 2016-02-27 16:57:31 · 637 阅读 · 0 评论 -
HDU 1394 Minimum Inversion Number (线段树 or BIT)
题意: 给定一个序列, 可以不断的通过把第一个数移到最后一位, 生成新的序列, 求所有序列的最小逆序数分析: 线段树单点更新, 区间查询啦~ 或者另一种想法也可以, 见注释吧代码: 线段树//// Created by TaoSama on 2015-09-18// Copyright (c) 2015 TaoSama. All rights reserved.////#p原创 2015-09-18 18:48:31 · 360 阅读 · 0 评论 -
UVALive 3938 Ray, Pass me the dishes (线段树区间合并)
题意: 求q次询问的静态区间连续最大和起始位置和终止位置 输出字典序最小的解分析: 很显然的区间合并的题目啦 常理就是维护pre, sub, suf 最大的 前缀和, 连续和, 后缀和 然后这个题还要记录解的位置所以还要区间总和sum 然后解的位置preR, subL, subR, sufL 然后更新就好了 自己注意下字典序就好了 建树和查询都类似总结: 死守着HH线段树风格原创 2015-09-16 00:54:08 · 975 阅读 · 0 评论 -
Codeforces #310(div2)
A. Case of the Zeros and Ones题意: 我爱消除 - - 相邻的01就会被消除 问最后能剩下多少~思路: 仔细观察我们发现 只要存在不相同的数 那么它们一定会被消除 最后一定为全0或者全1序列那么答案就是abs(n_'0' - n_'1')了参考code://// Created by TaoSama on 2015-06-27// Cop原创 2015-06-28 17:44:41 · 688 阅读 · 0 评论 -
HDU 5493 Queue (线段树) 2015合肥网络赛
题意: 给定N<105个人的序列,N个(height,k)二元组描述这个序列height:=这个人的身高,k:=这个人的左边或者右边有k个人比他高构造一个字典序最小的序列满足这些条件给定N<10^5个人的序列, N个(height, k)二元组描述这个序列 height:= 这个人的身高, k:= 这个人的左边或者右边有k个人比他高 构造一个字典序最小的序列满足这些条件分析:原创 2015-09-28 16:40:30 · 1583 阅读 · 3 评论 -
ACdream 简单数据结构 专题
A - 风之国题意: 给出X轴上N个点的坐标 X轴上的点按大小两两互相连通 现在要必须干掉K条路 求最小花费分析: dp+线段树优化 我表示不会 copy一遍题解 首先题目给出的城市坐标不是按X轴升序的, 那么我们就将每个城市根据坐标从左到右映射到X轴上的1~n 设dp[i]:= 到第 i 个点(包括第i个点)时, 处理掉前面所有必须不连原创 2015-09-22 00:18:43 · 982 阅读 · 0 评论 -
HDU 4267 A Simple Problem with Integers (线段树)
题意: N<=5×104,每次将区间[a,b]内满足(i−a)%k=0(i∈[a,b])的数Ai增加c,最后单点查询值N <= 5×10^4, 每次将区间[a,b]内满足(i-a)\%k=0(i \in[a,b])的数A_i增加c, 最后单点查询值分析: 很裸的区间增减,单点查询的模型,但是好久没写BIT了我没有看出来,就想着线段树去了,然后只有单点查询的,我维护了区间增减值的和。。这题原创 2015-09-30 14:27:32 · 762 阅读 · 0 评论 -
POJ 3667 Hotel (线段树区间合并)
题意: 给定一个开始全空的序列 两种操作 1 D 查询字典序最小的连续D长度空序列的 起始位置 并将其置为已用 2 X D 将X开始的D长度连续序列 置空分析: 字典序最小查询的时候注意一下就好啦 其他就是裸的区间合并了代码://// Created by TaoSama on 2015-09-29// Copyright (c)原创 2015-09-29 23:11:39 · 621 阅读 · 0 评论 -
HDU 3308 LCIS (线段树区间合并)
题意: 查询区间连续最长上升子串的长度 有单点修改操作分析: 之前的风格草这种题太容易了 - - 随手写完就A了代码://// Created by TaoSama on 2015-09-29// Copyright (c) 2015 TaoSama. All rights reserved.////#pragma comment(linker, "/STACK:10240原创 2015-09-29 23:20:42 · 607 阅读 · 0 评论 -
Uva 11992 Fast Matrix Operations (二维线段树)
Fast Matrix Operations题意: 给定一个r op1: 子矩阵元素全部增加v op2: 子矩阵元素全部变成v op3: 查询子矩阵的元素和, 最小值, 最大值分析: 二维线段树裸题啦~ 这个题对于回复状态非常不错哒, 几乎包含了一般线段树的所有情况 要注意一下push_down的时候 setv的优先级大于addv 然后setv之后要原创 2015-09-15 00:28:37 · 639 阅读 · 1 评论 -
HDU 5497 Inversion (BIT)
题意: N<=105的序列,求删去一个M<N的连续子序列后,剩余序列的最小逆序对数N<=10^5的序列, 求删去一个M<N的连续子序列后, 剩余序列的最小逆序对数分析: 求逆序对当然要BIT辣,然后维护删去固定大小的序列可以用two pointers求逆序对当然要BIT辣, 然后维护删去固定大小的序列可以用two \ pointers 开两个BIT,b[]维护连续M子序列前面的,c[原创 2015-10-04 00:25:03 · 724 阅读 · 0 评论 -
HDU 1540 Tunnel Warfare (线段树区间合并)
题意: 1-2-3-...-n练成一条链, 三种操作 D: 毁掉x R: 恢复上次毁掉的 Q:查询与x直接相连或者间接相邻的数量(包括自己)分析: 线段树求区间连续最大和, 经典题目 维护区间从左端点开始最大连续和lsum, 同理rsum 查询的时候 查看当前是否在子区间的rsum和lsum 范围内 是的话 答案就是它 找不到就是0原创 2015-09-17 22:37:32 · 477 阅读 · 0 评论 -
HDU 4027 Can you answer these queries (有意思的线段树)
题意: 区间开方, 然后求区间的和分析: 乍一看像是区间开方 无法维护这个和 但是由于题目说了 维护的是整数(round down to integer) 我们可以想到 开方的次数不会很多 这样我们直接暴力单点更新 也没有问题啦 问题解决代码://// Created by TaoSama on 2015-09-16// Copyright (c) 20原创 2015-09-18 21:13:56 · 465 阅读 · 0 评论 -
HDU 3794 Assign the task (时间戳dfs序线段树)
题意: 给定一棵树表示上下级关系 每次对一个人及其所有的下级分配任务 他们直接开始新的这个任务 求每次查询当前人的进行任务分析: 用dfs序(时间戳)来维护上下级关系, st[x], ed[x]表示包括自己以及所有的下级 然后就是一个普通的区间更新 单点查询的题目了代码://// Created by TaoSama on 2015-09原创 2015-09-18 22:30:03 · 689 阅读 · 0 评论 -
HDU 2795 Billboard(线段树单点更新)
题意: h*w的木板, 放进一些1*L的物品, 求每次放的可以放的最上面的位置, 放了之后就占据相应的位置思路: 维护1-h线段的线段树 每段长w 然后不断维护区间的最大值 查询的时候优先往左儿子(相当于向上) 然后就是单点更新的裸题了代码://// Created by TaoSama on 2015-09-18// Copyright (c) 201原创 2015-09-18 21:10:47 · 361 阅读 · 0 评论 -
ZOJ 1610 Count the Colors (线段树区间染色)
题意: 不断对区间染色 最后求每种颜色有连续的几段 按字典序输出分析: 由于是区间染色啦 假如将区间全部看成点 [2,3] 1 [3,4] 2 这样的话 本来3颜色是1 却变成了2 会有问题 解决方式将[l,r]区间更新的时候用[l,r-1]来代替 保持原来的区间的性质 问题就 转化成了线段树区间更新的问题了代码:原创 2015-09-18 22:22:46 · 656 阅读 · 0 评论 -
HDU 4614 Vases and Flowers(线段树、二分)
题意: N≤5×104个花瓶,M≤5×104次操作N\le 5\times 10^4个花瓶, M\le5\times 10^4次操作 1 i k:从i开始放k束花,如果i放过了,就i+1,依次类推,插够为止,多了的丢弃1\ i\ k:从i开始放k束花, 如果i放过了, 就i+1, 依次类推, 插够为止, 多了的丢弃 输出插花的第一个位置和最后一个位置,不能就是输出Can not pu原创 2016-03-01 01:50:16 · 386 阅读 · 0 评论