![](https://img-blog.csdnimg.cn/20201014180756930.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构-线段树
-skyline-
这个作者很懒,什么都没留下…
展开
-
AcWing 1275. 最大数(线段树:单点修改+单点查询)
原题链接题意给定一个正整数数列a1,a2,…,an,每一个数都在0∼p−10∼p−1之间。可以对这列数进行两种操作:添加操作:向序列后添加一个数,序列长度变成n+1n+1; 询问操作:询问这个序列中最后LL个数中最大的数是多少。程序运行的最开始,整数序列为空。写一个程序,读入操作的序列,并输出询问操作的答案。输入格式第一行有两个正整数m, p,意义如题...原创 2020-05-05 15:25:22 · 211 阅读 · 0 评论 -
洛谷 P3373 【模板】线段树 2
洛谷 P3373 【模板】线段树 2已知一个数列,你需要进行下面三种操作:1.将某区间每一个数乘上x2.将某区间每一个数加上x3.求出某区间每一个数的和思路:两个lazy标记:add和mul,怎么下放?我遇到的问题:很多题解上来就说先乘后加比先加后乘好处理。我疑惑:如果有两个lazy标记,不知道add和mul谁先来的,怎么决定谁优先呢?毕竟对一个数列先乘后加和先加后乘的结果...原创 2019-10-06 00:43:16 · 325 阅读 · 1 评论 -
洛谷 P3372 【模板】线段树 1
题目链接修改:区间加;查询:区间和。#include<bits/stdc++.h>using namespace std;typedef long long ll;#define ls (p<<1)#define rs (ls|1)#define mid (t[p].l+t[p].r>>1)const int N=1e5+5;bool v...原创 2019-10-05 20:26:37 · 108 阅读 · 0 评论 -
Lucky Array CodeForces - 121E(线段树 单点修改 区间和查询 优化)
题意:lucky数只由4和7组成给n个数,m个操作,操作有两种1.区间内每个数加上d2.询问区间lucky数有多少个数据保证在执行完所有区间加操作后,每个数不会超过1e4!思路1 线段树:直接暴力的话会T看上去是区间修改,其实lucky数的修改只能落到单点上,所以值的修改和计数的修改,都是单点修改①如果每修改一次都判断一下是不是lucky数,会T②如果不管是不是...原创 2019-10-04 15:25:52 · 225 阅读 · 0 评论 -
ACWing 245. 你能回答这些问题吗(线段树区间合并)
题目链接单点修改,区间查询最大子段和线段树区间合并模板题#include<bits/stdc++.h>using namespace std;#define ls (p<<1)#define rs (ls|1)#define mid ((t[p].l+t[p].r)>>1)const int N=500005;int n;stru...原创 2019-10-04 10:41:37 · 139 阅读 · 0 评论 -
Vases and Flowers HDU - 4614 (线段树 区间修改+二分查找)
1. 从a开始在空花瓶放b枝花,花放完或第N-1个花瓶放完为止 输出放花的第一个和最后一个位置2. 将[a,b]的花都扔掉 输出扔了多少枝花思路:线段树维护[0,N-1]空花瓶数v求a之前有多少空花瓶V(查[0,N-1]空花瓶数 - [a,N-1]空花瓶数)二分查找放花的第一个和最后一个位置(先求出可以放多少枝花,min ( [a,N-1]的空花瓶数 , b )然后...原创 2019-09-19 21:20:34 · 172 阅读 · 1 评论 -
I Hate It HDU - 1754 (单点修改+区间最值查询 线段树)
#include<bits/stdc++.h>using namespace std;const int maxn = 200000+5; //原始数组的最大值int arr[maxn];struct node{ int l, r, mx;//l表示该结点区间的左端点, r表示该结点区间的右端点,mx表示[l, r]上的最大值。} tr[4 * maxn]; /...原创 2019-07-30 11:29:05 · 112 阅读 · 0 评论 -
Stars in Your Window POJ - 2482 线段树 扫描线
因为矩形的大小固定,所以矩形可以由它的任意一个顶点唯一确定。我们可以考虑把矩形的右上角顶点放在什么位置,圈住的星星亮度总和最大。所以,对于一颗星星,能够覆盖住这颗星星的右上角的位置在区间[x+w,y+h]之间,但是由于边界上的星星不算,所以不妨将星星变为[x−0.5,y−0.5],于是右上角变为[x+w−1,y+h−1]。问题就转化成了:平面上有若干个区域,每个区域都带有一个权值,求在哪个...原创 2019-07-16 16:15:55 · 141 阅读 · 0 评论 -
ZYB's Premutation HDU - 5592 (逆序对 线段树求第K大)
Problem DescriptionZYBhas a premutationP,but he only remeber the reverse log of each prefix of the premutation,now he ask you torestore the premutation.Pair(i,j)(i<j)is considered as a rev...原创 2019-07-07 15:32:15 · 169 阅读 · 1 评论 -
覆盖的面积 HDU - 1255 线段树 扫描线
改模板成功~#include<bits/stdc++.h>using namespace std;const int N=100005;struct P{ double x,y,z; int k; bool operator<(const P w)const { return x<w.x; }}a[N<<1];//2N个四元组do...原创 2019-07-16 09:33:52 · 89 阅读 · 0 评论 -
Mayor's posters POJ - 2528 线段树 离散化 区间染色
3天前AC的代码,今天看来问题颇多,有些地方并没有真正理解。你对原力其实一无所知!(哭)#include<iostream>#include<algorithm>#include<cstdio>#include<cstring>#define mem(a,b) memset(a,b,sizeof(a))const int ma...原创 2019-07-15 11:24:58 · 151 阅读 · 0 评论 -
Can you answer these queries? HDU - 4027 (线段树 区间(其实是单点)开根号 区间和查询)
1. 开根号操作不具有区间合并性(不像区间加、减、改值),所以此题其实是单点更新,没法用延迟标记。2. 注意到一个long long范围内的数k(k<=2^63-1)在经过最多6~7次的开方后,必然会变成1,而且1的平方根也是1,也就是说:当一个数为1的时候,我们没有必要对它进行操作和更新,而且一个很大的数仅仅经过6~7次就可以变成1。3. 由此想出剪枝方法:每当我们要进行更新操作的...原创 2019-07-05 12:19:07 · 255 阅读 · 0 评论 -
Balanced Lineup POJ - 3264 (线段树 区间最值查询)
注意:多组输入,maxx数组初始化为0,minx数组初始化为INF;query_max时,res初值为0,query_min时,res初值为INF。#include<iostream>#include<cstring>#include<cstdio>using namespace std;const int MAXN=200005;const i...原创 2019-07-05 10:14:03 · 122 阅读 · 0 评论 -
线段树 扫描线 学习笔记
问题模型:给出一个一维数列,如何找出连续的数(不超过w个),使它们的和最大。这个问题可以用线段树O(nlogn)地解决,将一个数a放到x这个位置的同时,放一个相反数-a在x+w的位置,然后求出整个区间的最大和,就是答案。注意,应该先插入-a,再插入a。扫描线第一题 Atlantis POJ - 1151 HDU - 1542//Author:XuHt#include <...原创 2019-07-13 15:07:09 · 156 阅读 · 0 评论 -
线段树多种修改操作总结
洛谷 P3373 【模板】线段树 2修改:区间加、乘查询:区间和关键:先乘后加,更新mul tag时,add tag也要乘一下。原创 2019-07-12 17:36:12 · 271 阅读 · 0 评论 -
区间改值 线段树 Just a Hook HDU - 1698
#include<bits/stdc++.h>using namespace std;typedef long long ll; const int maxn=100005;int n;int a[maxn],tag[maxn<<2],sum[maxn<<2];int nl,nr;int ls(int p){return p<<1;}...原创 2019-06-26 10:33:54 · 99 阅读 · 0 评论