hdu1754线段树入门

线段树入门第一题! I Hate It HDU - 1754 很多学校流行一种比较的习惯。老师们很喜欢询问,从某某到某某当中,分数最高的是多少。  这让很多学生很反感。  不管你喜不喜欢,现在需要你做的是,就是按照老师的要求,写一个程序,模拟老师的询问。当然,老师有时候需要更新某位同学的成绩。 Input本题目包含多组测试,请处理到文件结束。  在每个测试的第一行,有两个正整数 N 和 M ( 0 学生ID编号分别从1编到N。  第二行包 阅读详情
I Hate It

Time Limit: 9000/3000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 7182    Accepted Submission(s): 2583

Problem Description
很多学校流行一种比较的习惯。老师们很喜欢询问,从某某到某某当中,分数最高的是多少。
这让很多学生很反感。

不管你喜不喜欢,现在需要你做的是,就是按照老师的要求,写一个程序,模拟老师的询问。当然,老师有时候需要更新某位同学的成绩。
 

 

Input
本题目包含多组测试,请处理到文件结束。
在每个测试的第一行,有两个正整数 N 和 M ( 0<N<=200000,0<M<5000 ),分别代表学生的数目和操作的数目。
学生ID编号分别从1编到N。
第二行包含N个整数,代表这N个学生的初始成绩,其中第i个数代表ID为i的学生的成绩。
接下来有M行。每一行有一个字符 C (只取'Q'或'U') ,和两个正整数A,B。
当C为'Q'的时候,表示这是一条询问操作,它询问ID从A到B(包括A,B)的学生当中,成绩最高的是多少。
当C为'U'的时候,表示这是一条更新操作,要求把ID为A的学生的成绩更改为B。
 

 

Output
对于每一次询问操作,在一行里面输出最高成绩。
 

 

Sample Input
   
5 6 1 2 3 4 5 Q 1 5 U 3 6 Q 3 4 Q 4 5 U 2 9 Q 1 5

 

Sample Output
  
5 6 5 9
第一次写博客,初学线段树。(用的是静态数组实现 ,指针也可以)
也分享一下代码;
题目很简单,多组数据、操作
包括建树、查询、更改,求区间的最大值。
代码如下(附AC图)

Code:
#include<stdio.h>
#include<stdlib.h>
int a[500010];
struct node{
	int l,r;//左右儿子和x——y的最大值value
	int va;
}tree[500010];
int max(int a,int b){
	if(a>b)return a;
	else return b;
}
//建树(两种办法,更喜欢int型)
int create_tree(int h,int x,int y){
	tree[h].l=x;tree[h].r=y;
	int mid=(x+y)>>1;
        //若为单位线段
        if(tree[h].l==tree[h].r){
		tree[h].va=a[x];
 		return tree[h].va;
		}
        //最大值的处理
	int x1=create_tree(h*2,x,mid);
  	int x2=create_tree(h*2+1,mid+1,y);
	tree[h].va=max(x1,x2);
	return tree[h].va; 
}
/*
void create_tree(int h,int x,int y)[
	tree[h].l=x;tree[h].r=y;
	int mid=(x+y)/2;
	if(x==y)tree[h].va=a[x];
	else {
		 create_tree(2*h,x,mid);
		 create-tree(2*h+1,mid+1,y);
		 tree[h].va=max(tree[2*h].va,tree[2*h+1].va);
	}
}
*/
//更新
void update(int h,int x,int y){
	tree[h].va=max(tree[h].va,y);//更改某一点最大值后,对父节点的Va进行处理
	if(tree[h].l==tree[h].r)return;//操作完毕
	if(x<=tree[2*h].r)update(2*h,x,y);//如果在该点左子树范围内则往左子树找
	else update(2*h+1,x,y);
}
//写的最通俗的一段了,很好读懂
int query(int h,int x,int y){
	if(tree[h].l==x&&tree[h].r==y)return tree[h].va;
	if(tree[2*h+1].l<=x)return query(2*h+1,x,y);
	if(tree[2*h].r>=y)return query(2*h,x,y);
	int mid=(tree[h].l+tree[h].r)>>1;
	return max(query(2*h,x,mid),query(2*h+1,mid+1,y));//如果查询区间于左右重复
}
int main(){    
        int i,j,k,m,n;    
        int x,y;    
        char c;    
    while(scanf("%d%d",&n,&m)!=EOF){    
        for(i=1;i<=n;i++)scanf("%d",&a[i]);    
        create_tree(1,1,n);    
        for(i=1;i<=m;i++){    
            getchar();    
            scanf("%c %d %d",&c,&x,&y);    
            if(c=='Q')
                printf("%d\n",query(1,x,y));    
            else      
        		update(1,x,y);
        }    
    }    
        return 0;    
    }    
(P·S 本题在hdu可AC,但洛谷实际数据不对,会直接WA)
初学程序可优化,有大牛请在下方留言

车载以太网SOMEIP入门必看:从服务发现到事件订阅,一次搞懂三种核心通信模式(附报文实例) 本文深入解析车载以太网SOME/IP的三种核心通信模式:服务发现、方法调用和事件订阅,通过真实报文实例和仿真工具演示,帮助开发者快速掌握这一关键技术。文章特别强调服务发现机制的基础作用,并详细介绍了Request/Response与Fire&Forget两种方法调用模式的应用场景,为智能汽车网络通信开发提供实用指南。 阅读详情

相关推荐

单细胞多组学数据整合分析实战:从原始数据到跨平台合并

本文详细介绍了单细胞多组学数据整合分析的实战流程,从原始数据处理到跨平台合并分析。通过Seurat和Harmony等工具的应用,帮助研究者有效解决批次效应问题,保留真实的生物学信号。文章包含代码示例和常见问题解决方案,特别适合需要进行单细胞合并分析的研究人员参考。

weixin_30752699的博客 90

线段树入门-hdu1754

题目:很多学校流行一种比较的习惯。老师们很喜欢询问,从某某到某某当中,分数最高的是多少。 这让很多学生很反感。 不管你喜不喜欢,现在需要你做的是,就是按照老师的要求,写一个程序,模拟老师的询问。当然,老师有时候需要更新某位同学的成绩。Input本题目包含多组测试,请处理到文件结束。 在每个测试的第一行,有两个正整数 N 和 M ( 0&lt;N&lt;=200000,0&lt;M&lt;5000 ...

不平凡的博客 444

简易电梯控制系统设计(两层楼)(

(电子科技大学 数字系统实验二 结课验收项目 ) 题目要求:

m0_48801027的博客 1万+

线段树入门经典题/HDU1166/HDU1754

今天学习了一下线段树最简单的单点的思想,一开始有点难懂,理解了的话就还好。这两道题本质都差不多,以后有时间可能会更其他线段树的思路分享,这里就先放题目和代码: HDU1166:题目描述 更新单点,求区间总和 #include<cstdio> #include<algorithm> using namespace std; const int MAXN=50005; int ...

弋墨尘的博客 455

VisionPro脚本实战:用C#替代QuickBuild,让复杂定位项目代码更清爽

本文探讨了如何通过C#脚本重构VisionPro复杂定位项目,替代臃肿的QuickBuild架构。通过实战案例展示了脚本化开发如何减少60%代码量并提升35%运行效率,使项目更易维护。文章详细介绍了环境搭建、多模板定位重构及高级技巧,帮助开发者突破QuickBuild限制,实现更高效的视觉应用开发。

weixin_30417487的博客 502

ADC INL&DNL测试方法和实例

本文介绍了一种可操作的ADC INL和DNL的测试方法--直方图法(也称码密度法)。并实际使用该方法测试了两款芯片的ADC INL和DNL

APTCHIP的博客 1万+

HDU 1754 线段树入门

1.做的第一道线段树的题,纯套模板,单点修改线段树,没什么要注意的点。 //裸 线段树的建立 线段树的更新 线段树的查找 //采用数组建树的方法 #include&lt;iostream&gt; #include&lt;cstdio&gt; #include&lt;cstring&gt; using namespace std; const int maxn=200000; int inte...

shadandeajian的博客 451

uniapp - H5网页打包运行报错Failed to load resource: net::ERR_FILE_NOT_FOUND(uniApp打包成H5部署到服务器,打包h5白屏并报错页面空白)

Failed to load resource: net::ERR_FILE_NOT_FOUND,uniapp 坑之打包之后白屏,uniapp打包h5,HBuilderX 打包H5后空白报错 Failed to load resource: net::ERR FILE NOT_FOUND,UNI-APP H5应用白屏(空白页)解决方案,白屏并报错Failed to load resource: net::ERR_FILE_NOT_FOUND,uniapp开发,打包成H5部署到服务器,uniapp打包之后首页

🏆 前端领域优质创作者 3578

HDU1754 线段树入门

<br />I Hate It<br />Time Limit: 9000/3000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)<br /> Total Submission(s): 5978    Accepted Submission(s): 2113<br /><br /><br />Problem Description<br />很多学校流行一种比较的习惯。老师们很喜欢询问,从某某到某某当中,分数最高的是多少。<b

ACM_DavidCN的专栏 981

OsgEarth —— 笔记6 - 开发阶段加入漫游飞行(附源码)

效果      视频地址   源码 源码下载请私信   代码      代码相关内容:           OSG —— 笔记1 - 指令调用模型           OsgEarth —— 笔记1 - 创建地球的earth文件           OsgEarth —— 笔记2 - Qt窗口加载earth地球(附源码)           OsgEarth —— 笔记3 - 为地

1896

解锁 Bootloader 不再难!HyperOS澎湃系统小米与红米手机通用

必要时,可以在工具右上角安装驱动模块,手动安装驱动。解决方法:确保手机升级到最新稳定版,登录同一个小米账号,并在。新机型解锁时需要等待一段时间,通常为 7 天。如果账号安全评分较低,解锁等待时间会更长。如果解锁失败提示权限不足,说明账号存在安全问题。出现这个错误时,通常是因为网络不稳定。如果解锁次数已满,需要等到下个月。解锁后,手机会重启,首次开机会稍微慢一些,等耐心等待即可。按钮,开始解锁过程,注意:解锁会清除手机内所有数据。7次,开启开发者选项。,右键解压到指定文件夹。,使用小米账号登录。

代码简单说 Vue、JAVA、PHP、Node.js 熟练运用,接口、架构、性能全搞定。 7221

线段树 入门总结 hdu 1754 1161

单点更新的线段树。包括区间最值问题,区间之和问题。 线段树擅长处理一个区间之内的查询与更新。 线段树学习: 线段树上的每一个节点都维护一段区间,根节点维护的是整个区间,一个父节点的左节点维护的是将父亲的区间二等分之后的左边那个区间,右节点同理。 下面都以区间最值问题为例。可以在O(log n)的复杂度下完成查询某一个区间的最值,或者修改某一个值。 主要有三个操作 1)建树。2)查询。3)更

liujc_的专栏 607

华为OD机试2025C卷 - 精准核酸检测 (C++ & Python & JAVA & JS & GO)

华为OD机试2025C卷 精准核酸检测,提供Java、C++、Python、Go、JavaScript源码实现,并提供完整思路讲解

qq_45776114的博客 1707

线段树入门HDU_1754

题目链接:点击打开链接 I Hate It Time Limit: 9000/3000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 58817    Accepted Submission(s): 22905 Problem Description 很多学

Tovi的博客 575

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

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

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

HDU 1754(线段树入门)

问题描述:很多学校流行一种比较的习惯。老师们很喜欢询问,从某某到某某当中,分数最高的是多少。 这让很多学生很反感。 不管你喜不喜欢,现在需要你做的是,就是按照老师的要求,写一个程序,模拟老师的询问。当然,老师有时候需要更新某位同学的成绩。Input本题目包含多组测试,请处理到文件结束。 在每个测试的第一行,有两个正整数 N 和 M ( 0&lt;N&lt;=200000,0&lt;M&lt;500...

wust_cyl的博客 300

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

hdu1754(线段树入门题)

Problem Description 很多学校流行一种比较的习惯。老师们很喜欢询问,从某某到某某当中,分数最高的是多少。 这让很多学生很反感。 不管你喜不喜欢,现在需要你做的是,就是按照老师的要求,写一个程序,模拟老师的询问。当然,老师有时候需要更新某位同学的成绩。 Input 本题目包含多组测试,请处理到文件结束。 在每个测试的第一行,有两个正整数 N 和 M ( 0<N<=20...

MInNrz的Love&Share 277

hdu 1754 线段树入门 单点更新

I Hate It Time Limit: 9000/3000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 48222    Accepted Submission(s): 18880 Problem Description 很多学校流行一种比较的习惯。老师们很

liyunlonghere 505

hdu 1754 线段树入门

线段树点修改  区间最大值查询 #include #include #include #include #include #include #include #include #include #include #include #include #include #define maxn 200010 #define INF 0x7fffffff #define in

xlc2845的专栏 867

HDU-1754(线段树入门)

这个代码觉得还可以看,,而且.我觉得,这样的风格稍微适合我点,,,大神的代码还是有点接受不了,暂时先用这个吧... 大家看看.有什么可取之处. 代码: #include #include #include #include int t[222222]; struct Node{ int a; int b; int max; }tree[888888]; int max(in

李硕 880

线段树入门——HDU 1754

对应HDU题目:点击打开链接

大田二十 526

hdu 1754 线段树入门的题

线段树入门,对于A C M E R来说线段树这种实用高效的数据结构是十分重要的,本人也是今天才学的,弄懂了一点,就记录下来了,感兴趣的就看看呗。。。说明不多但是注释很详细,因为我觉得对着代码说明更好懂。另外完全不知道线段树的可以百 度了解一下,再看,毕竟我对线段树的概念没有做出说明。线段树的主要优势是查询区间值,及修改区间的值时间复杂度都是O(l o g n)的。

柯安的专栏 1748

HDU 1754 线段树 及其 入门知识

刚开始以为看到这道题是提交,ac的人很多,以为是水题,用最简单的方法操作,超时! 线段树!! 线段树是一种二叉搜索树,与区间树相似,它将一个区间划分成一些单元区间,每个单元区间对应线段树中的一个叶结点。 对于线段树中的每一个非叶子节点[a,b],它的左儿子表示的区间为[a,(a+b)/2],右儿子表示的区间为[(a+b)/2+1,b]。因此线段树是平衡二叉树,最后的子节点数目为N

vsooda的专栏 957
下一篇: 2013年noip第三题货车运输truck(树链剖分LCA+最大生成树)
__Galaxy
博客等级 码龄10年 8粉丝 33原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值