kuangbin线段树专题
文章平均质量分 73
kuangbin线段树专题
逍遥Fau
为伊蕾娜献上心脏!
展开
-
POJ1177 Picture(待补)
题目链接:Picture大致题意现在有平面直角坐标系xoy, 有n个平行于x轴y轴的矩形, 给出这些矩形的左下角和右上角的坐标, 让你求出这些矩形组成的图形的周长是多少解题思路本文参考博客还没学会… 高估自己了QAQ 大家看大佬这篇博客吧AC代码#include <iostream>#include <vector>#include <cstdio>#include <algorithm>#define rep(i, n) for (in原创 2021-01-20 21:53:16 · 190 阅读 · 0 评论 -
HDU1255 覆盖的面积 (线段树 + 扫描线)
题目链接:覆盖的面积大致题意现在有平面直角坐标系xoy, 有n个平行于x轴y轴的矩形, 给出这些矩形的左上角和右下角的坐标, 让你求出这些矩形组成的图形中被至少两个矩形覆盖的部分的总面积.解题思路如果你还没有做过这道题, 推荐点击链接先看一下这个题这个题和上面给出超链接的题是几乎一模一样的, 我在这里不再多分析了, 唯一的区别就是要求计算至少被两个矩形的面积.设当前区间被覆盖一次的长度为len1, 两次为len2, 那么我们类比于上一题的思路, 我们从小到大枚举x, 最终的结果只需要累加△x *原创 2021-01-19 22:21:33 · 369 阅读 · 5 评论 -
HDU1542 Atlantis (线段树 + 扫描线)
题目链接:Atlantis大致题意现在有平面直角坐标系xoy, 有n个平行于x轴y轴的矩形, 给出这些矩形的左上角和右下角的坐标, 让你求出这些矩形组成的图形的总面积.解题思路本题是 线段树 + 扫描线 的典型例题, 是十分经典的模版题.分析:例如需要求下图所示的矩形的面积总和:我们不妨将所有矩形的所有边都延长, 然后将整个坐标轴划分成一个个小区域:然后再将这些小区域按照垂直于x轴的直线再次划分成一个个小矩形(如下图阴影所示):现在我们需要计算的总面积可以拆分成图中阴影部分的面积之和原创 2021-01-19 22:05:01 · 655 阅读 · 0 评论 -
Assign the task(DFS序)
题目链接:Assign the task大致题意推荐看CaprYang的版本, 中文题面很棒, 唯一的问题就是, 输入图的时候是n-1行, 而不是n行.解题思路既然是线段树专题, 我们的解题方法就仅提供线段树做法.这个题不同于其他题的点就在于, 我们需要维护的不是一个给出的区间, 而是一棵树. 而我们的线段树维护的理论上应该是一个区间. 所以本题的难点在于, 如何把一棵树区间化.这里推荐大家先去学习一下 dfs序, 我们可以通过dfs序来给每个节点分配一个新的编号, 从而再将整棵树区间化.由于原创 2020-12-24 10:19:56 · 534 阅读 · 4 评论 -
约会安排(线段树)
题目链接:约会安排大致题意这个题… 全中文, 具体的题意麻烦大家看看题面吧.解题思路线段树的区间修改和区间查询.需要创建两棵线段树, 维护区间内的最大空闲时间, 左连续最大空闲时间, 右连续最大空闲时间.分析题目需要的操作: ①基友和自己约会, 那么在基友的树中查询最先可以预约的时间, 然后进行基友树的区间修改 ②女生和自己约会, 先在基友树中寻找是否有时间, 如果没有再在女神树中查找. 若找到则进行区间修改. ③自己想好好学习了, 则清空基友树和女神树的[l, r]区间对于操作①原创 2020-11-25 17:54:38 · 477 阅读 · 0 评论 -
Vases and Flowers(线段树)
题目链接:Vases and Flowers大致题意给定一个整数n, 表示有n个花瓶(初始为空花瓶), 编号从0~n-1. 有如下两种操作: ①从编号为x的花瓶开始, 要放y朵花, 从前往后一次遍历, 如果是空花瓶则放一朵花在里面, 直至放完所有花或者遍历到最后一个花瓶为止. 倘若此时还有花放不下, 则将它们直接丢弃. ②清理[l, r]区间的所有花瓶, 如果里面有花则将其丢弃对于每个操作①, 需要输出第一个放花的位置和最后一个放花的位置. 倘若一朵花都放不下, 需要输出"Can not pu原创 2020-11-25 17:18:42 · 684 阅读 · 2 评论 -
Transformation(线段树)
题目链接:Transformation大致题意给定区间[1, n] 有如下四种操作: ①将[l, r]区间的数值都增加c ②将[l, r]区间的数值变为原来的c倍 ③将[l, r]区间的数值都变为c ④查询[l, r]中每个点的p次方区间和, p = 1, 2, 3.解题思路这个题真的是太恶心了本题考查线段树的 区间修改和区间查询这个题由于每次查询是查单个点的p次方之和, 所以我们需要维护三个区间和, 分别表示p=1,2,3时的结果.那么对于①②③的修改操作, 其中②③的操作都原创 2020-11-25 17:17:57 · 485 阅读 · 0 评论 -
Tunnel Warfare(线段树)
题目链接:Tunnel Warfare大致题意给定一个正整数n, 表示有n个点排成一列, 每个点与其相邻的两点是连通的.接下来对于区间[1, n]有如下三种操作: ①删除第x个点. ②询问点x所处的最大连通区间的长度 ③最后删除的点被恢复了解题思路线段树的单点修改和区间查询.本题需要维护的量有三个, 当前区间的最大连通长度, 左侧最大连通长度, 右侧最大连通长度.对于操作一和操作三而言, 我们只需要进行单点修改操作即可.而对于操作二有如下两种情况:为了方便书写, 以lmax表示原创 2020-11-25 16:22:24 · 1040 阅读 · 1 评论 -
Can you answer these queries?(线段树)
题目链接:Can you answer these queries?大致题意给定一个正整数n, 接下来对于区间[1, n]有如下两种操作: ①对于区间[l, r]里的每一个数, 变为原来的√x ②询问区间[l, r]的和.解题思路线段树的区间修改和区间查询.需要注意的点: ①输入的x和y大小不保证x<y ②当某一区间的各个元素都是1后, 不需要再进行修改了.AC代码#include <bits/stdc++.h>#define rep(i, n) for (int原创 2020-11-25 16:21:39 · 592 阅读 · 0 评论 -
Balanced Lineup(线段树)
题目链接:Balanced Lineup大致题意给定一组序列编号从1-n, 有q个询问, 每次询问[l, r]区间的最大值与最小值的差值.解题思路线段树的区间查询, 由于本题没有修改操作, 所以只需要用线段树维护区间内部的最大值与最小值即可.对于每一组询问, 输出两者差值即可.AC代码#include <cstdio>#include <iostream>#include <algorithm>#define rep(i, n) for (int i原创 2020-11-25 12:52:07 · 821 阅读 · 0 评论 -
Count the Colors(线段树)
题目链接: Count the Colors本题在vjudge里没法提交, 所以给出ZOJ的链接.大致题意给定n个区间l, r和颜色c, 每次给[l, r]涂上c这个颜色. 后面的涂色会覆盖之前的涂色.最后要求输出区间[0, 8000]中每种颜色及其出现的次数, 如果该颜色没有出现过则不输出.解题思路还是线段树的区间染色问题, 与Mayor‘s posters思路基本相同.本题需要注意的地方是: 建树的区间是固定的[0, 8000], 给定的n是操作次数.我查阅了网上的很多代码, 我发现网上原创 2020-11-25 09:25:13 · 533 阅读 · 1 评论 -
Just a Hook(线段树)
题目链接: Just a Hook大致题意给定一个n, 对于区间[1, n]有如下操作: 选定l, r, 把[l, r]区间全部修改为数值c最后输出[1, n]的区间和解题思路考察线段树的区间修改 + 根结点查询.最后输出语句记得要复制样例的输出!!! 复制全!!! 我少复制了个’.’, debug了半天 TwTAC代码#include <bits/stdc++.h>#define rep(i, n) for (int i = 1; i <= (n); ++i)usin原创 2020-11-25 09:23:18 · 961 阅读 · 2 评论 -
Mayor‘s posters(线段树染色)
题目链接: Mayor’s posters大致题意有n个人依次贴海报, 第i个海报的范围是[li, ri]. 后面贴的海报会覆盖掉之前贴的海报.问: 最终还能看到多少张海报.解题思路这个题算是线段树染色里非常经典的题目了. 考察的是线段树的区间修改, 区间查询, 染色.这类题目的一大特点就是: 线段树内不维护任何数值, 当前节点的值即为懒标记的值.(个人理解)特别的, 本题的实际数据范围推荐为1E5, 题目中的1E4会报REAC代码#include <iostream>#in原创 2020-11-24 12:51:30 · 1341 阅读 · 12 评论 -
A Simple Problem with Integers(线段树 / 树状数组)
题目链接: A Simple Problem with Integers大致题意有两种操作: ①给区间[l, r]所有元素增加c ②查询区间[l, r]中所有元素值的和解题思路线段树区间修改 + 区间查询, 维护的数值为区间中的元素和同样本题也提供一种树状数组的做法.AC代码(线段树做法)#include <iostream>#include <cstdio>#define rep(i, n) for (int i = 1; i <= (n); ++i原创 2020-11-24 12:50:19 · 997 阅读 · 2 评论 -
I Hate It(线段树维护最大值)
题目链接: I Hate It解题思路本题同样是非常基础的线段树模板考察线段树的单点修改 + 区间查询, 维护的数值为区间中的最大值AC代码(线段树)#include <bits/stdc++.h>#define rep(i, n) for (int i = 1; i <= (n); ++i)using namespace std;typedef long long ll;const int N = 2E5 + 10;int w[N];struct node {原创 2020-11-24 12:49:31 · 496 阅读 · 0 评论 -
敌兵布阵(线段树 / 树状数组)
题目链接: 敌兵布阵解题思路本题是非常基础的线段树模板考察线段树的单点修改 + 区间查询, 当然, 树状数组也可以处理本题, 所以给出两种思路供参考.AC代码(线段树)#include <bits/stdc++.h>#define rep(i, n) for (int i = 1; i <= (n); ++i)using namespace std;typedef long long ll;const int N = 5E4 + 10;int w[N];struct原创 2020-11-24 12:48:34 · 1028 阅读 · 0 评论 -
kuangbin线段树专题
写在前面的话博主也是个新手, 最近正在写kuangbin的线段树专题, 感觉整体线段树专题的难度也是从易到难的.但是的确在做题过程中遇到了 许多困难, 也学到了很多东西, 希望这些能帮到后来者.当然如果您有不同的见解, 或者发现了代码中的错误, 也希望您能提出我们一同探讨.关于个人写代码习惯: ①本人没有太多宏定义使用的习惯, 只有一个for循环的宏定义, 希望不会影响到大家的代码观感. ②本人写代码有压行的习惯. 因为希望自己写出的代码尽可能短以及利于自己理解.如果这篇博客帮助到了您,原创 2020-11-24 12:54:48 · 4659 阅读 · 7 评论