线段树
ID_BePosit
如果今天不比昨天多做一点什么,那么明天还有什么意义。
展开
-
D - Jumping Haybales -线段优化坐标DP
D - Jumping Haybales Gym - 101617D 题意: 从1,1到n, n求最小步数只是每一秒可以向右或向下走k步若是直接搜索无疑会超时 即便是dp也会超时 只有维护k步内最小值直接进行优化即可, 维护方法有多重选择了简单点的线段树 注意线段树的=的位置,Otherwise, it will RE.... 不过线段树也在TLE MLE的边缘 ...原创 2018-10-01 08:37:48 · 220 阅读 · 0 评论 -
J-Different Integers-树状数组-区间不同数查询
https://ac.nowcoder.com/acm/contest/139/J 树状数组学习:https://www.cnblogs.com/acgoto/p/8583952.html 题意:给你一个数组, q次询问, 每次询问都会有1个[l, r] 求 区间[1,l] 和 [r, n] 中 数字的种类是多少。 思路:first数组记录每个值第一次出现的位置,last数组记录每个值...原创 2018-11-24 11:01:44 · 256 阅读 · 0 评论 -
E - Super Mario HDU - 4417 -主席树第二弹-区间小于K的总数
E - Super Mario HDU - 4417 lower_bound( 1,n,num):从数组的1位置到n位置二分查找第一个大于或等于num的数字. 找到返回该数字的地址,不存在则返回end。通过返回的地址减去起始地址begin,得到找到数字在数组中的下标。 upper_bound( 1,n,num):从数组的1位置到n位置二分查找第一个大于num的数字, 找到返回...原创 2018-11-25 18:07:13 · 803 阅读 · 0 评论 -
A - K-th Number POJ - 2104 -主席树第一弹-第K大的数
感谢:http://www.cnblogs.com/zyf0163/p/4749042.html https://blog.csdn.net/qq_24451605/article/details/49031123 裸题多次查询给定区间L—R内第K大的数 #include<iostream>#include<cstdio>#include<algori...原创 2018-11-25 12:03:20 · 295 阅读 · 1 评论 -
P3373 【模板】线段树 +*混合操作
思路:先说一下调了好久的bug而且是易犯得错,注意root.lazy传递给root*2.lazy时不是直接root*2.lazy=root.lazy 而是累计(+或*) 例如:root * 2.lazy + = root.lazy.并且这种+,*混合的要注意只要更新*,就必须更新+,无论是在 updata还是down操作都是只要更新 * 就得更新+. #include<bits/...原创 2018-12-02 20:05:03 · 333 阅读 · 1 评论 -
M - Atlantis HDU - 1542 -扫描线-面积并
M - Atlantis HDU - 1542 感谢:https://www.cnblogs.com/scau20110726/archive/2013/03/21/2972808.html 1.矩形比较多,坐标也很大,所以横坐标需要离散化(纵坐标不需要),熟悉离散化后这个步骤不难,所以这里不详细讲解了,不明白的还请百度 2.重点:扫描线法:假想有一条扫描线,从左往右(从右往左...原创 2018-11-30 18:45:02 · 201 阅读 · 0 评论 -
P1972 [SDOI2009]HH的项链-树状数组-区间不同数查询
P1972 [SDOI2009]HH的项链 题意:一个整数N,表示项链的长度。N 个整数,一个整数M,表示 询问的个数。 接下来M 行:每行两个整数,L 和R(1 ≤ L ≤ R ≤ N),表示询问的区间。最终输出区间内不同数目的个数 思路:最初想法:预处理出,到每个位置时已经出现的不同数字的个数,询问按照L排序,然后id从1开始遍历每一段 q[i].L,如果经历过程中遇到的数的终止位置为...原创 2018-11-28 20:14:50 · 243 阅读 · 0 评论 -
E. Lomsat gelral-CF600E-线段树合并
CF600E 给你一棵有n个点的树,树上每个节点都有一种颜色ci。 让你求每个点子树出现最多的颜色/编号的和 dfs遍历树过程进行线段树(权值线段树)合并,线段树无需按照*2 *2+1的方式去联系父子关系, 可以用一个id 出现一个新的结点id++,这道题注意一下有多个数目相同的颜色时输出他们的和即可。线段树结点维护三个值, 这个点的答案,最多的颜色数目,与颜色种类。 #incl...原创 2018-12-18 17:14:38 · 345 阅读 · 0 评论 -
D - Minimizing maximizer POJ - 1769 -DP-线段树
D - Minimizing maximizer POJ - 1769 题意:给你一些区间,按照顺序选出最少的区间覆盖 1-n ,如果没有规定按顺序,可以贪心排序 选最少, 思路:按照给定的顺序进行DP转移。可以直接忽略掉dp数组,进行线段树状态的转移,除了 以1开头的区间直接更新最小值,其他的需要查询 当前区间左端点的最小值。然后进行+1 转移 , 转移过程是 更新这个区间...原创 2018-12-21 16:43:06 · 232 阅读 · 0 评论 -
F - Another LIS HDU - 3564 -LIS-线段树
F - Another LIS HDU - 3564 题意:给你N个数的位置。数字i的位置为a[i],每插一个位置,要求输出当前最大的LIS。 思路:线段树插空法逆序处理出每一个数字所在的位置,然后按照数组去访问,因为题目输入顺序是 1放在哪个位置 2放在那个位置 ..... 所以按照1-n去访问这些数数字即可,由于数字是升序访问的,那么他们的位置只要符合单调升的 就是 这...原创 2018-12-21 18:16:07 · 237 阅读 · 0 评论 -
Naive Operations HDU - 6315 -思维+线段树
G - Naive Operations HDU - 6315 题意:给定长度n的数列b[i],m次操作,1:给a[i]一个区间内都加上1;2:求和一个区间a[i]/b[i]向下取整。 思路:区间更新和区间查询。现在就是怎么处理a[i]/b[i]。让线段树维护一个b[i]的最大值,一个a[i]的最小值。 sum=a[i]/b[i]。当最大值max小于min是就没有个sum要加一...原创 2018-11-12 18:23:55 · 187 阅读 · 0 评论 -
L - Vases and Flowers HDU - 4614 -线段树修改
L - Vases and Flowers HDU - 4614 #include<stdio.h>#define maxn 50150int ans,st,ed,num;int t,k,n,f,q;struct node{ int sum,l,r; int len() { return r-l+1; }...原创 2018-11-13 09:18:12 · 243 阅读 · 0 评论 -
I - Colonial Mansions Gym -线段树-Change
I - Colonial Mansions Gym - 101962I 题意:两种操作1.单点更新.2以一个点为中心查询他能到达的点的个数,移动规则为: 每一个点都有一个高度,只能往相邻的点移动 而且|hu-hv|<=H. 思路:建立线段树最底层存的是 区间内每一个点与它前一个点的差,第一个点没有前面差设置为0,查询到它的时候特判。 线段树区间维护的是这段区间中最大的那...原创 2018-11-02 09:38:00 · 172 阅读 · 0 评论 -
C - A Simple Problem with Integers-线段树lazy标记(模板)
C - A Simple Problem with Integers POJ - 3468 #include<iostream>#include<stdio.h>using namespace std;#define maxn 211111#define ll long longstruct node{ ll l,r; lo...原创 2018-10-01 10:45:45 · 156 阅读 · 0 评论 -
E - Just a Hook -区间更新
E - Just a Hook HDU - 1698 注意push-up push-down 操作 可以直接把len mid 打成函数 #include<iostream>#include<stdio.h>using namespace std;#define maxn 111111int t,q,x,y,z,n;struct node...原创 2018-10-01 17:39:48 · 200 阅读 · 0 评论 -
F - Count the Colors -小区间为点
F - Count the Colors ZOJ - 1610 #include<bits/stdc++.h>using namespace std;#define maxn 8888struct node{ int l,r; int color;} tree[maxn*4];int color[maxn];int temp,n,a,b,c,an...原创 2018-10-03 09:23:49 · 251 阅读 · 0 评论 -
G - Balanced Lineup -最值之差
G - Balanced Lineup POJ - 3264 #include<iostream>#include<stdio.h>#include<cstdio>using namespace std;#define ll long long#define inf 0x7f7f7f7fconst int maxn=500050;stru...原创 2018-10-03 10:10:38 · 304 阅读 · 0 评论 -
H - Can you answer these queries-剪枝点更新
H - Can you answer these queries? HDU - 4027 题意:段更新,但是直接更新到点会超时 ,由于求得是区间和但是更新的是区间内每一个点的sqrt显然lazy标记已经无法完成所以必须要进行点更新在更新总区间的和,但是可以剪枝优化,在题目所给的范围内最多sqrt 七次就会到1之后就不在变化了所以判断一下这个区间的和是否等于全为一时的和如果是的话直接停...原创 2018-10-03 17:41:52 · 150 阅读 · 0 评论 -
J - [永不止步-2017]_区间第K大-线段树维护
J - [永不止步-2017]_区间第K大 把线段树的结点的数据域设置为vector类型即可别的操作为区间更新模板 思路就是这样runtime error暂时没改对 #include<bits/stdc++.h>using namespace std;#define inf 0x3f3f3f3f#define maxn 5000000#define lson roo...原创 2018-10-17 17:04:35 · 410 阅读 · 0 评论 -
J - Assign the task HDU - DFS序-线段树
J - Assign the task HDU - 3974 按照dfs序建树,区间更新点查询 #include<iostream>#include<stdio.h>#include<cstring>using namespace std;#define maxn 50020struct edg{ int to,...原创 2018-10-20 08:36:49 · 197 阅读 · 0 评论 -
D - Snacks HDU - DFS序-线段树
D - Snacks HDU - 5692 注意val值是各个点到0的距离然后dfs序跑一边标号之后建树区间更新区间查询最大值即可 #pragma comment(linker, "/STACK:1024000000,1024000000")#include<iostream>#include<algorithm>#include<cst...原创 2018-10-20 10:20:22 · 305 阅读 · 0 评论 -
K - Master of Sequence HDU - 思维-线段树
K - Master of Sequence HDU - 6274 给定区间初始状态全部为1,然后有两种操作一种是给某段区间上的数字进行*2另一种是给某段区间上的数字*3 然后最后查询整段区间的GCD,直接线段树维护区间最小值即可有两个维护一个是乘二的次数最小另一个是 乘3的次数最小最后的结果就是2的minsum2次方,3的minsum3次方 #include<s...原创 2018-10-24 16:52:12 · 270 阅读 · 0 评论 -
D - Mayor's posters POJ - -线段树+离散化
D - Mayor's posters POJ - 2528 思路:离散到20000个点上然后进行区间更新用颜色来标记。最后查询不同颜色的数目。 #include<iostream>#include<cstring>#include<map>#include<stdio.h>#include<algorithm&...原创 2018-10-30 08:10:02 · 201 阅读 · 0 评论 -
C - K-inversions URAL - 1523 -dp-权值树
C - K-inversions URAL - 1523 题意:给出一个1-n的排列求一下长度为k的 位置与数值满足这个关系的 子序列个数: 1 ≤ i 1 < i 2 < … < ik ≤ n and ai 1 > ai 2 > … > aik. 思路:dp转移,dp[i][j] i 代表新的长度为k的序列中第i个数 , j代...原创 2018-12-11 16:20:34 · 310 阅读 · 0 评论