线段树(带删除节点)

权值线段树总结 权值线段总结 权值线段树就是把线段树的每个点权,赋予一定的含义,比如数字出现的次数,数值前缀出现的次数,并用区间求和维护一个前缀信息,比如数字出现的次数,第K大等(不能实现区间第K大),前缀第K大等。 权值线段树优点: 能够比较容易实现平衡树的一系列操作 一个序列中,插入一个数,删除一个数,求值为数的排名,查询第K小的数,求比这个数小的数,求比这个数大的数。 上述操作都可以通过... 阅读详情

动态最值(minmax.Cpp/c/java)
(空间限制128M)

有一个包含n个元素的数组,要求实现以下操作:
DELETE k:删除位置k上的数。右边的数往左移一个位置。
QUERY i j:查询位置i~j上所有数的最小值和最大值。

【输入】(minmax.in)
输入第一行包含两个数n, m,表示原始数组的元素个数和操作的个数。第二行包括n个数,表示原始数组。以下m行,每行格式为1 k或者2 i j,其中第一个数为1表示删除操作,为2表示询问操作。
【输出】(minmax.out)
输出一行,包括两个数,表示该范围内的最小值和最大值。
【样例输入】
10 4
1 5 2 6 7 4 9 3 1 5
2 2 8
1 3
1 6
2 2 8
【样例输出】
2 9
1 7
【限制】
数组中的元素绝对值均不超过109
第一组:n = 10, 1 分, 时限 0.1s
第二组:n = 333, 2 分, 时限 0.1s
第三组:n = 4232,3分, 时限 0.1s
第四组:n = 6324, 4分, 时限 0.2s
第五组:n = 9999, 5分, 时限 2s
第六组:n = 100000, m = 300000, 10分,时限 2s
第七组:n = 300000, m = 422342, 13分,时限 3s
第八组:n = 500000, m = 651222, 18分,时限 3s
第九组:n = 900000, m = 432122, 22分,时限 5s
第十组:n = 999999,m = 999999,22分,时限 5s

/************************
   author   : Grant Yuan
   time     : 2014/10/4 18:06
   source   : 十一第二场
   algorithm: 线段树
*************************/
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<algorithm>
#include<cmath>
#define INF 0x7fffffff
#define MAX 1000007
using namespace std;

struct node
{
	int l;
	int r;
	int Min;
	int Max;
	int num;
};
node tree[4*MAX];
int n,m;
int input[MAX];
int ansmin,ansmax;
void build(int left,int right,int root)
{
	tree[root].l=left;
	tree[root].r=right;
	if(left==right){
		tree[root].Max=tree[root].Min=input[left];
		tree[root].num=1;
		return;
	}
	int mid=(left+right)>>1;
	build(left,mid,root*2);
	build(mid+1,right,root*2+1);
	tree[root].Max=max(tree[root*2].Max,tree[root*2+1].Max);
	tree[root].Min=min(tree[root*2].Min,tree[root*2+1].Min);
	tree[root].num=tree[root*2].num+tree[root*2+1].num;
}

void query(int left,int right,int root)
{
	if(left==1&&(right==tree[root].num))
	{
		ansmin=min(ansmin,tree[root].Min);
		ansmax=max(ansmax,tree[root].Max);
		return;
	}
	int n1=tree[root*2].num;
	int n2=tree[root*2+1].num;
	if(left<=n1&&right>n1) {query(left,n1,root*2); query(1,right-n1,root*2+1);}
	else if(left<=n1&&right<=n1) query(left,right,root*2);
	else if(left>n1&&right<=n1+n2) query(left-n1,right-n1,root*2+1);

}

void Delete(int num,int root)
{
	if((tree[root].l==tree[root].r))
	{
		tree[root].num=tree[root].num-1;
		tree[root].Min=INF;tree[root].Max=-INF;
		return;
	}
	int n1=tree[root*2].num;
	int n2=tree[root*2+1].num;
	if(num<=n1) Delete(num,root*2);
	else  Delete(num-n1,root*2+1);
	tree[root].num=tree[root*2].num+tree[root*2+1].num;
	tree[root].Max=max(tree[root*2].Max,tree[root*2+1].Max);
	tree[root].Min=min(tree[root*2].Min,tree[root*2+1].Min);
}


int main()
{
	freopen("minmax.in", "r",stdin);
    freopen("minmax.out", "w", stdout);
    while(~scanf("%d%d",&n,&m)){
		for(int i=1;i<=n;i++)
		{
			scanf("%d",&input[i]);
		}
		for(int i=1;i<=4*n;i++)
			 tree[i].Min=INF,tree[i].Max=-INF;
		build(1,n,1);
		int a,b,c;
		for(int i=1;i<=m;i++)
		{
			scanf("%d",&a);
			if(a==1){
				scanf("%d",&b);
				Delete(b,1);
			}
			else if(a==2){
				ansmin=INF;ansmax=-INF;
				scanf("%d%d",&b,&c);
				query(b,c,1);
				printf("%d %d\n",ansmin,ansmax);
			}
		}
    }
    return 0;
}


 

权值线段树与可持久化线段树 权值线段树 是什么 权值线段树也是一棵线段树,但是它与普通线段树有所区别: 普通线段树记录的是一段区间 [l,r] 中的a[l]~a[r]的某种信息(如sum,max,最大连续子段和等),其叶子节点为a[i]。 权值线段树记录的是区间l~r每个数字出现的次数和,其叶子节点为 i 在数组a中出现的次数。 做什么 简单来看,权值线段树可以非常方便地查询一段区间的数字出现的次数。 引申出它... 阅读详情

相关推荐

【Sentaurus TCAD仿真】几种基础操作

当内存不足时,没必要删除整个Project,只需要 Clean up 节点信息即可。因为占用内存的主要部分是。文件数据,Command文件是不占用多少内存的,下次需要此工程仿真结果重新运行即可。右击可以对该工程进行剪切、复制、删除、重命名等操作。当节点号有时候排序混乱的时候,我们需要重新编排节点号。此时左侧工具栏就能看见我们新建的这个工程。运行节点时不同的颜色代表目前的状态。在这个地方添加要使用的工具。这个时候需要的工具就建好了。然后选择需要使用的工具。我们需要保存这个工程。

qq_45746744的博客 1万+

线段树

定义 线段树是一颗二叉树,它将区间划分成若干个[i,i+1]的单元区间,每个单元区间对应于二叉树中的一个叶子节点。每个节点用一个变量cover来记录覆盖该节点的线段的条数。 设根为[a,b]的线段树记为T(a,b),区间的长度b-a为L(atypedef struct LineNode{ int left,right;//表示区间[left,right] int cover;//

pussy_foot 509

Frida提取Cocos游戏XXTEA密钥的实战方法论

XXTEA是一种轻量级分组加密算法,广泛用于移动端游戏通信保护;其128位密钥的安全性直接决定网络协议逆向成败。在Cocos引擎生态中,密钥常以静态常量、JNI动态传递或Native运行时派生三种形态存在,导致传统静态分析失效。Frida凭借跨Java/Native注入能力与内存实时观测优势,成为捕获密钥‘出生瞬间’的关键工具——尤其适用于hook xxtea_encrypt函数入口、监控JNI参数传递、设置内存断点追踪派生过程等场景。本文聚焦Cocos2d-x与Cocos Creator项目,覆盖从密钥识

weixin_33509600的博客 416

线段树实现动态查询和删节点

题目描述: 有一个未知排列,已知排列中元素个数以及每个元素前面有多少个元素比它本身小。 求此排列。 /*  分析: *  解法一:全排列 然后挑选符合题意的排列 *  解法二:倒过来看  *   最后一个元素n[i] 代表这个元素在整个排列的位置排在s[i]+1个 *   倒数第二个元素m[i-1] 代表这个元素在剩下的排列中排在s[i-1]+1个 * 依次类推 *   有:看代

Mathore的专栏 569

了解随机振动疲劳分析中 Ansys nCode DesignLife 的平均应力校正

通过选择静态环境,我们可以将其结果视为疲劳计算的平均应力,如图 3 所示,因此从静态偏移载荷工况中提取的平均应力用于转移预测雨流计数中所有循环的平均值。您可以通过观看下面的教学视频获得宝贵的见解,该视频将指导您完成利用 Ansys nCode DesignLife 分析平均应力对随机振动载荷下结构的影响的过程。它基于 R 比率或平均应力水平。另一方面,平均应力校正可以帮助消除平均应力的负面影响,提高结果的保真度。Ansys nCode 提供先进的平均应力校正技术,使工程师能够考虑平均应力对疲劳寿命的影响。

jkh920184196的博客 1518

UNet改进(52):轴向+代理注意力让UNet既轻快又精准

本文提出了一种改进的UNet架构,通过引入轴向注意力代理模块增强医学图像分割性能。该模块将二维自注意力分解为行列两个一维注意力操作,结合可学习代理节点进行全局信息聚合,在保持计算效率的同时提升模型对长距离依赖的建模能力。实验表明,该方法在多个医学图像数据集上较传统UNet提升3.2%-5.7%的Dice系数,边界质量显著改善。该方案特别适用于具有方向性结构的医学图像分割任务,如血管、器官等,在计算复杂度和分割精度之间实现了良好平衡。

2501_91516851的博客 327

线段树:最优清零方案

最优清零方案。

当个免费仓库用用 515

用Excel或WPS做两独立样本的T检验

一般情况下收集数据时常用的是Excel或者WPS,但统计时却用SPSS等软件进行统计学分析,经常很多人找不到SPSS的安装包,或者苦于正版激活或忘记教程,其实Excel或WPS自带函数就足够了,均数、标准差以及统计检验都是一个函数而已。解释:先做F检验,如果F>0.05就做T检验,Ttset里的数据为两组的数据的比较,结果如下。A组的均数计算 =AVERAGE(B2:B6)A组的标准差计算 =STDEV(B2:B6)B组的标准差计算=STDEV(B7:B19)分组 数值 A组均数 A组标准差 p值。

Mrrunsen的博客 6752

【原创】一维线段树的建树、插入、遍历和删除

一、定义: 线段树,说白了,就是把线段储存在一棵树里。 举一个例子: 数轴上,有一条线段[1,9]:12345678 将其二分:          12345678        1234    5678     12 34       56 78 1 2 3 4           5 6 7 8 这就是一棵线段树。 把数字换成线段,更清楚: 用严谨一点的语言,是一

致上 5354

fastlio2原理详解

其核心是利用IMU的高频数据(通常100-500Hz)进行状态预测(前向传播),同时利用激光雷达扫描(通常10-100Hz)作为观测来校正状态。转换了卡尔曼增益的计算公式,将对大维度观测矩阵的求逆(点云数量级)转换为对小维度状态矩阵的求逆,从而极大提升了计算效率。:利用预测出的连续IMU状态,将一帧内每个激光点根据其时间戳反向插值,统一校正到扫描结束时刻,输出无畸变的点云。收敛后,用最终的状态将本帧点云。,根据其精确的时间戳,利用前后两个IMU位姿进行插值,计算出该点采集时刻的精确位姿,再将其全部。

Studying…… 102

Android13无重力感应系统修改触摸屏跟随屏幕显示旋转方向旋转

在实际产品中设计时会移除重力传感器。当设备缺少重力传感器时,系统无法使用该传感器提供的方向数据来确定屏幕旋转的方向。Android 系统中由于移除重力传感器导致的默认显示方向旋转引起触摸屏与屏幕显示不一致问题,主要是由于缺乏方向检测和触摸坐标的正确转换。通过使用替代传感器(如陀螺仪)、手动配置方向、调整触摸事件坐标和 UI 布局,可以解决这个问题。开发者需要确保在设备没有重力传感器的情况下,能够通过其他方法推测方向,并确保触摸事件和 UI 动作能够正确响应设备的旋转。

weixin_35723192的博客 803

[生气!!&教训] D: Delete(Wannafly挑战赛2)(拓扑+Dijkstra+线段树)

D: Delete 链接:https://ac.nowcoder.com/acm/contest/17/D 来源:牛客网 以下表情包来源(百度 http://www.baidu.com) Description 给定一张n个点,m条边的带权有向无环图,同时给定起点S和终点T,一共有q个询问,每次询问删掉某个点和所有与它相连的边之后S到T的最短路,询问之间互相独立(即删除操作在询问结束之后会立即撤销...

weixin_44090305的博客 1342

机器人中的数值优化(二十一)—— 伴随灵敏度分析、线性方程组求解器的分类和特点、优化软件

本系列文章主要是我在学习《数值优化》过程中的一些笔记和相关思考,主要的学习资料是深蓝学院的课程《机器人中的数值优化》和高立编著的《数值最优化方法》等,本系列文章篇数较多,不定期更新,上半部分介绍无约束优化,下半部分介绍带约束的优化,中间会穿插一些路径规划方面的应用实例

慕羽★的博客 4205

Wannafly挑战赛2_D Delete(拓扑序+最短路+线段树)

Wannafly挑战赛2_D Delete Problem : 给定一张n个点,m条边的带权有向无环图,同时给定起点S和终点T,一共有q个询问,每次询问删掉某个点和所有与它相连的边之后S到T的最短路,询问之间互相独立(即删除操作在询问结束之后会立即撤销),如果删了那个点后不存在S到T的最短路,则输出-1。 n,q <= 10^5 Solution : 注意到题中所给的是DAG,首先...

aekijekzn484879763的博客 536

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

BZOJ4184 shallot

BZOJ4184 shallot 就是带删除的线性基,考虑对时间分治,就是按时间建线段树,对于一个数,得到他的存在时间区间[l,r],然后对线段树上相应节点记录这个数。最后dfs线段树,在叶子节点求解。 但是我一开始T了,因为我对于每个数[1,n],都重新dfs了一遍,就导致时间复杂度较大。其实可以在dfs中传参线性基。 1 //考虑对时间分治,就是按时间建线段树,对于一...

weixin_30752377的博客 183

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

【算法】线段树

几乎是算法竞赛最常用的数据结构了,它主要用于(要求满足结合律)。与树状数组相比,它可以实现的,还可以同时(加、乘),更具通用性。如题,已知一个数列,你需要进行下面两种操作:1.将某区间每一个数加上x2.求出某区间每一个数的和第一行包含两个整数N、M,分别表示该数列数字的个数和操作的总个数。第二行包含N个用空格分隔的整数,其中第i个数字表示数列第i项的初始值。

weixin_73366312的博客 1808

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

线段树及线段树模板

线段树是一种二叉搜索树,与区间树相似,它将一个区间划分成一些单元区间,每个单元区间对应线段树中的一个叶结点。使用线段树可以快速的查找某一个节点在若干条线段中出现的次数,时间复杂度为Olog⁡NO(\log N)OlogN。而未优化的空间复杂度为2N2N2N,实际应用时一般还要开空间为4N4N4N的数组以免越界,因此有时需要离散化让空间压缩。线段树是一种二叉搜索树,与区间树相似,它将一个区间划分成一些单元区间,每个单元区间对应线段树中的一个叶结点。

AllenAC的博客 1234

线段树的创建插入查找删除

一、线段树基本概念            线段树是一种二叉搜索树,与区间树相似,它将一个区间划分成一些单元区间,每个单元区间对应线段树中的一个叶结点。     对于线段树中的每一个非叶子节点[a,b],它的左儿子表示的区间为[a,(a+b)/2],右儿子表示的区间为[(a+b)/2+1,b]。因此线段树是平衡二叉树,最后的子节点数目为N,即整个线段区间的长度。     使用线段树可以快速

3号&无守卫 4178

删除多余线段_线段树

2020-3-24 更新代码------------------------------------------------------------------------------前置技能:二叉树本文有五部分:一,简介二,作用及原理三,线段树中最重要的----延迟标记四,额外说明五,具体实现一,简介线段树,一种树状数据结构,顾名思议,树的每一个节点存储的是线段的某种信息,因此,你需要声明...

weixin_35651612的博客 378

数据结构:线段树

已迁往:http://www.iteblog.com/archives/144一、线段树基本概念           线段树是一种二叉搜索树,与区间树相似,它将一个区间划分成一些单元区间,每个单元区间对应线段树中的一个叶结点。    对于线段树中的每一个非叶子节点[a,b],它的左儿子表示的区间为[a,(a+b)/2],右儿子表示的区间为[(a+b)/2+1,b]。因此线段树是平衡二叉树,最后的子

过往记忆大数据 11万+

线段树详解

线段树

good good study, day day up! 1317

dijkstra之zkw线段树优化

其实特别好理解,我们只要写一个数据结构(线段树)支持一下操作: 1.插入一个数\(x\)。 2.查询当前数据结构中最小的数的插入编号。 3.删除插入编号为\(x\)的数。 第一眼看成可持久化了 其实就是一个单点修改,区间(全局)查询的线段树。 zkw线段树在普通线段树的基础上进行了优化(卡常神器)。 我们记录每一个点在线段树中叶子节点的编号。这样修改的时候就不用递归下去找了,直接一个w...

weixin_30299709的博客 303

权值线段树算法讲解及例题

普通的线段树一般是求区间之和或区间最值,所以这些线段树的每个节点的下标是原数组中的区间范围,每个节点存的是区间和或最值,而权值线段树的每个节点的下标是数组中元素的值,而权值线段树每个节点存的是当前元素出现的次数。在开始建树之前对原数组的值进行离散化,在线段树中操作时,因为经过了离散化,所以最大的值最多也只有元素个个数那么大,所以就可以写不同线段树就行了。这道题我用的是动态开点完成,在原数组输入的时候在update函数对现在贡献的逆序对进行记录,并同时将当前的元素加入线段树中,在查询并累加贡献和。

STY_fish_2012的博客 919

5.7、线段树

信息学竞赛中经常会碰到一些跟区间有关的问题,比如:给定一些区间线段求并区间的长度,或并区间的个数等。通常情况下数据范围非常大时,使用朴素方法的时间复杂度过高,导致不能在规定时间内得到问题的解。

融码一生:专注 Python、C/C++、Linux、机器学习 & 深度学习、NLP、算法领域分享 834
上一篇: 西工大10级保研机试 柱状图
下一篇: POJ 3268 双向Dijkstra
iviko
博客等级 码龄12年 13粉丝 167原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值