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

线段树详解 (原理,实现与应用) 线段树详解 By 岩之痕 一:综述 线段树是一种可以快速进行区间修改和区间查询的数据结构。点修改,区间修改和区间查询的复杂度都是O(log2(n)) 并且,线段树可以维护很多种类的信息。说到线段树就不得不提一下树状数组,树状数组维护的信息必须满足区间减法,因为树状数组只是维护1到X的信息,通过相减来得到区间信息,代码简单而且速度快,占用空间又少于线段树,所以一般情况下可以用树状数组的地方就 阅读详情
题目描述:
有一个未知排列,已知排列中元素个数以及每个元素前面有多少个元素比它本身小。
求此排列。
/*  分析:
*  解法一:全排列 然后挑选符合题意的排列
*  解法二:倒过来看 
*   最后一个元素n[i] 代表这个元素在整个排列的位置排在s[i]+1个
*   倒数第二个元素m[i-1] 代表这个元素在剩下的排列中排在s[i-1]+1个
* 依次类推
*   有:看代码..
*/

全排列就不写了,主要放解法二代码:
/****** version 1************/

#include <cstdio>
#include <cstdlib>
#include <iostream>

#define maxn 10010
#define finput(file) freopen(file,"r",stdin)
#define foutput(file) freopen(file,"w",stdout) 
using namespace std;


int main(int argc, char *argv[])
{
	int num,i,j,k;
	int ans[maxn],s[maxn],n[maxn];

//	finput("in.txt");
//	foutput("out.txt");

	cin>>num;
	i=0;
	while(i++<num)
	{
		cin>>s[i];
		ans[i]=0;
		n[i]=0;
	}
	for(i=num;i>0;i--)//处理剩下排列的最后一个
	{
		for(j=1,k=0;k<s[i]+1;j++)
		{
			if(n[j]==0)
				k++;
		}
		ans[i]=j-1;
		n[j-1]=1;
	}
	for(i=num;i>=0;i--)
		cout<<ans[i]<<" ";
	return 0;
}




这是常规解法。下面是线段树解。
/*****  version 2 ************/
/****线段树解*****/
/*实现在一个集合中查找第K大数而且还要支持动态删除点*/
/*动态删除的时候。。设置一个跳转的值。。*/

#include <cstdio>
#include <cstdlib>
#include <iostream>

#define maxn 10010
#define finput(file) freopen(file,"r",stdin)
#define foutput(file) freopen(file,"w",stdout) 
using namespace std;

typedef struct node
{
	int sta,end;
	int leftnum;
	struct node *leftChild, *rightChild;
	int number;
}node;

node* buildTree(int a,int b)
{
	node* p ;
	p = (struct node*)malloc(sizeof(node));
	if(a == b) 
	{
		p->leftChild = NULL;
		p->rightChild = NULL;
		return p;
	}
	p->sta = a;
	p->end = b;
	
	p->leftChild = buildTree(a,(a+b)/2);
	p->rightChild = buildTree((a+b)/2+1,b);
	p->leftnum = (b-a)/2+1;//左孩子个数
	//左孩子个数是(b-a+1)/2会错  

	return p;
};

//第a大的值赋为num
void addNumber (node* p,int a,int num)
{
//	if(a > (p->leftnum + p->rightnum))
//		return;
	if(p->leftChild == NULL)
	{
//		cout<<"t1:-"<<a<<endl; //a必定为1
		p->number = num;
		return;
	}
	if(a > p->leftnum)
		addNumber(p->rightChild, a - p->leftnum,num);
	if(a <= p->leftnum)
		addNumber(p->leftChild, a, num);
};

//查找第N大的数,并删除
int search(node *p, int a)
{
	int res;
	if(p->leftChild == NULL)
	{
		return p->number;
	}
	if(a > p->leftnum)
		res = search(p->rightChild, a-p->leftnum);
	if(a <= p->leftnum)
	{
		p->leftnum--;
		res = search(p->leftChild, a);
	}
	return res;
}

int main(int argc, char* argv[])
{
	node *tree;
	int casenum;
	int num,a[maxn],ans[maxn];

//	finput("in.txt");

	cin>>casenum;
	while(casenum--)
	{
		cin>>num;
		tree = buildTree(1, num);
		int i,j=0;
		for(i=1;i<=num;i++)
		{
			cin>>a[i];
			addNumber(tree,i,i);
		}
		for(i=num;i>0;i--)
			ans[i]=search(tree, a[i]+1);
		for(i=1;i<=num;i++)
			cout<<ans[i]<<" ";
		cout<<endl;
	}
	return 0;
}




   线段树一般都是操作静态数据,针对这个题目,每查询一次就要将所进行的查询结果从原集合中删除
于是,设置一下左子树所拥有的数目,就可以进行选择了。因为区间[a,b]是我们操作的,所以能保证不超,所以非左即右。
   针对每一个节点,都有一个左孩子数目。所以我们能很方便找到区间内第k大。
  描述不是很清楚》。《 主要看代码吧..  

遥感大模型之Prithvi的关键技术解读 Prithvi系列模型开创了遥感领域基础模型新范式,通过海量多源时空数据(HLS和SAR)与Vision Transformer架构的深度融合,采用掩码自编码器进行自监督预训练,实现了强大的地球观测表征能力。该技术体系突破传统方法在全局建模、多模态融合和时空分析上的局限,仅需少量标注数据即可在土地分类、灾害监测等任务上取得优异表现。从初代3亿参数到Prithvi-EO-2.0的10亿参数升级,展现了模型可扩展性,为构建地球数字孪生智能基座奠定基础。 阅读详情

相关推荐

深入浅出:利用NXP S32K3xx的HSE模块实现OTA双分区(AB Swap)与安全回滚

本文深入解析NXP S32K3xx HSE模块在汽车电子OTA双分区架构中的工程实践,详细介绍了HSE模块如何通过AB Swap双分区机制实现固件安全升级与毫秒级回滚。内容涵盖内存重映射硬件原理、分区切换异常处理及寄存器级诊断方法,为开发高可靠嵌入式系统提供实战指导。

weixin_30919429的博客 795

线段树(带删除节点)

动态最值(minmax.Cpp/c/java) (空间限制128M) 有一个包含n个元素的数组,要求实现以下操作: DELETE k:删除位置k上的数。右边的数往左移一个位置。 QUERY i j:查询位置i~j上所有数的最小值和最大值。 【输入】(minmax.in) 输入第一行包含两个数n, m,表示原始数组的元素个数和操作的个数。第二行包括n个数,表示原始数组。以...

weixin_30532973的博客 530

正交试验minitab

1.创建正交试验 2.根据自己的实验选择水平数和因子数,并选定一个正交表 3.得到正交表 4.填写实验结果 5.进行正交分析 点击结果,点击分析 6.得到分析结果 7.方差分析 选择响应变量与因子,点击确定 得到方差分析的结果 ...

a999999123的博客 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

基于STM32设计自动输液监测系统(241)

该系统集成了液位传感模块、光电传感器、电机模块、按键模块和OLED显示屏等多个功能模块,以实现全面的输液过程监控和控制。液位传感模块能够实时监测输液瓶中的液位,当液位到达限定值时,系统会自动控制步进电机夹紧输液管,并发出报警提醒,确保输液过程不会因液位过低而中断。

1341

SQL中的时间计算:员工每日工作时长

摘要:本文介绍了一个使用SQL查询计算员工每日工作时长的实用方法。通过分析包含员工打卡记录的数据库表,利用CTE(公共表表达式)将日期分组,计算最早和最晚打卡时间差,最终以"小时:分钟"格式输出工作时长。该方法适用于每日两次打卡的场景,并提示了处理漏打卡等特殊情况时的注意事项,为企业考勤管理提供了有效的数据支持方案。(148字)

m0_74337424的博客 412

【线段树】动态最值

题目描述 有一个包含n个元素的数组,要求实现以下操作: DELETE k:删除位置k上的数。右边的数往左移一个位置。 QUERY i j:查询位置i~j上所有数的最小值和最大值。 例如有10个元素: QUERY 2 8的结果为2 9。依次执行DELETE 3和DELETE 6(注意这时删除的是原始数组的元素7)后数组变为: 输入 输入文件mi

peter_819的博客 1122

[Dify] HTTP 请求节点总是调不通?先把请求头、参数、变量和返回 JSON 拆开查

这篇文章围绕 Dify HTTP 请求节点调不通、接口能通但流程不稳定、返回 JSON 后续节点读不到等问题展开,从 Method、URL、Header、Body、变量映射和返回字段提取几个角度梳理排查顺序。适合正在把 Dify Workflow 接入企业微信、CRM、工单系统或内部接口的读者阅读,帮助你把接口调用从一次性跑通推进到可复用、可验证的业务流程。

技术小甜甜:传播可落地技术,帮助个人和企业降低解决真实场景问题的成本 3944

☆【線段樹】動態最值

有一个包含n个元素的数组,要求实现以下操作: DELETE k:删除位置k上的数。右边的数往左移一个位置。 QUERY i j:查询位置i~j上所有数的最小值和最大值。 例如有10个元素: 位置 1 2 3 4 5 6 7 8 9 10 元素

void* ptr = &OI; 799

为什么我的 Spark Executor / Yarn Container 只有一个vCore?

在很多集群里,在关闭了Spark的DynamicAllocation的前提下(避免自动申请空闲资源,干扰测试结果),都会观察到:提交Spark作业时,申请 1 个 driver + n 个 executor 会在Yarn上会对应创建 n+1 个 container,但是每个container只有一个vCore,通过--driver-cores和--executor-cores设定的vCore数都未奏效。有人会因此错误的认为Yarn上的一个vCore对应一个Spark的executor,这是非常错误的,正确的

Laurence的技术博客 916

华为MetaERP Oracle EBS OM(订单管理)模块详解作为ERP财务解决方案架构师,理解OM模块的业务全景和数据模型至关重要。OM是EBS分销链路的核心引擎,贯穿“订单到收款“(Orde

Oracle EBS OM模块是管理销售订单全生命周期的核心模块,涵盖客户管理、订单执行、发运开票、定价及信用控制等功能。其标准流程包括订单录入、预订、发放、发运确认和自动开票等环节,核心数据表涉及订单、客户、发运和定价等业务对象。OM模块与库存、应收、发运等模块深度集成,架构师需重点设计订单类型、信用控制策略和自动开票接口等关键环节,确保业务流程高效流转。

金牌架构师 359

线段树(Segment Tree)详解

线段树是一个强大的数据结构,特别适合处理区间查询和修改操作。虽然实现相对复杂,但在需要频繁进行区间操作的场景中,它的效率远超普通的数组操作。掌握线段树的原理和实现,对解决区间相关问题有很大帮助。

mainjay 1681

YOLOv11来了,使用YOLOv11训练自己的数据集和推理(附YOLOv11网络结构图)

YOLOv11 由 Ultralytics 在 2024 年 9 月 30 日发布, 最新的 YOLOv11 模型在之前的 YOLO 版本引入了新功能和改进,以进一步提高性能和灵活性。YOLO11 在快速、准确且易于使用,使其成为各种对象检测和跟踪、实例分割、图像分类和姿态估计任务的绝佳选择。

在职AI算法工程师,擅长计算机视觉,YOLO目标检测、分割等,擅长web、pyqt界面可视化,好内容持续更新中,来这里跟大家一起学习,共同进步 28万+

单词本

缩写 href hyper reference 超链接 src source JAVA单词 transient volatile native void super interface subclass final 单词 mock proof alt alternative servlet 小服务程序 prettify 美化 entropy 无序状态(熵) incurring 导致 ...

qq_33095515的博客 706

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

删除多余线段_线段树

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

weixin_35651612的博客 378

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

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

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

致上 5354

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

线段树及其基本操作

下图是对线段[1,10)建立的一棵线段树基本结构 1.每个节点都是一个[a,b)的区间,根节点代表了整个所要处理的区间 2. 对于每个非叶节点[a,b),令mid = (a + b) / 2;则其左右儿子节点代表的区间为[a,mid),[mid,b) 3.二叉的组织结构 4. 线段树是一个平衡树,树的高度为logN 5. 线段树把区间上的任意一条长度为L的线段都分成不超过

ACM,再见! 3074

数据结构:线段树

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

runfeel 456

线段树求解有序(可在过程中删除元素)第K大

用F数组表示区间内有几个数 void build(int l,int r,int rt) { f[rt] = (r-l)+1; if(l==r) { return ; } int mid = (l+r)>>1; build(l,mid,rt<<1); build(mid+1,r,rt<<1|1); } void ask(in

theflowerofac^MQLYES的专栏 582

求最值背景下动态删除线段树节点

动态最值(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,...

weixin_30588729的博客 178

【upc】2020年秋季组队训练赛第十二场J Greedy Termite | 删点线段树

状态 题目描述 There are n wooden rods vertically placed over a horizontal line. The rods are numbered 1 through n from leftto right. Each rod i (1 ⩽ i ⩽ n) is placed at position xi and has a height hi . A termite wants to eat all the rods one by one. It s..

一只酷酷光儿的博客 437

线段树 查询删除 后序遍历 POJ2182 Lost Cows解题报告

线段树 查询删除 后序遍历 POJ2182 Lost Cows解题报告

Dafang_Xu的博客 587

数据结构-线段树详解(含java源代码)

1 线段树的定义 首先,线段树是一棵二叉树。它的特点是:每个结点表示的是一个线段,或者说是一个区间。事实上,一棵线段树的根结点表示的是“整体”区间,而它的左右子树也是一棵线段树,分别表示区间的左半边和右半边。树中的每个结点表示一个区间[a,b]。每一个叶子结点表示一个单位区间。对于每一个非叶结点所表示的结点[a,b],其左孩子表示的区间为[a,(a+b)/2],右孩子表示的区间为[(a

知行合一,止于至善 1万+

线段树详解

线段树

good good study, day day up! 1317

线段树解决约瑟夫问题

约瑟夫问题围圈报数 总共有n个小孩子 每次循环报到m个数字的时候就退出队列 如果采用普通的循环队列来模拟的话时间复杂度是o(n*m) 当n和m都很大的时候计算的时间就会很长 所以将环拆开成为一条线 然后利用线段树进行模拟 时间复杂度为o(n*logn) 这里利用了线段树统计区间上没有退出的孩子的个数 这样在没有退出的孩子中从左到右找到第p个孩子的时候就可以使用类似于二分的方法来查

专栏 1705
上一篇: 组合逻辑控制器时序系统
下一篇: 利用Google Code托管项目
Mathore
博客等级 码龄15年 2粉丝 4原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值