#include<iostream>
#include<stdio.h>
using namespace std;
const int maxa=200005;
int val[maxa];
struct tree{int max, left, right;
}tree[maxa*3];
int create(int root,int left,int right) //root的*2和*2+1分别存root的前后部分
{
tree[root].left=left;
tree[root].right=right;
if(left==right)
return tree[root].max=val[left];
int a,b,mid=(left+right)/2;
a=create(root*2,left,mid);
b=create(root*2+1,mid+1,right);
return tree[root].max=max(a,b);
}
int change(int root,int pos,int vall) //当root代表的是改变的点时直接改变tree[root].max,其他与建树部分相同
{
if(pos<tree[root].left||tree[root].right<pos)
return tree[root].max;
if(pos==tree[root].right&&pos==tree[root].left)
return tree[root].max=vall;
int a,b;
a=change(root*2,pos,vall);
b=change(root*2+1,pos,vall);
return tree[root].max=max(a,b);
}
int query(int root,int left,int right)
{
if(tree[root].left>right||tree[root].right<left) //root范围与查询范围没有任何交集时return 0;
return 0;
if(tree[root].left>=left&&tree[root].right<=right) //root范围完全在查询范围时return tree[root].max;
return tree[root].max;
int a,b; //其他与建树部分相同
a=query(root*2,left,right);
b=query(root*2+1,left,right);
return max(a,b);
}
int main()
{
//freopen("input.cpp","r",stdin);
int n,m;
char a;
int x,y;
while(~scanf("%d%d",&n,&m))
{
for(int i=1;i<=n;i++)
{
scanf("%d",&val[i]);
}
create(1,1,n);
while(m--)
{
scanf("\n%c",&a);
scanf("%d%d",&x,&y);
if(a=='Q')
{
printf("%d\n",query(1,x,y));
}
else
change(1,x,y);
}
}
}

转载于:https://www.cnblogs.com/icodefive/p/3599177.html

线段树hdu1754相关推荐

  1. HDU - 1166敌兵布阵+HDU-1754 I Hate It (线段树单点更新——累加/最大值)

    线段树单点更新,模板题 HDU1166 敌兵布阵 C国的死对头A国这段时间正在进行军事演习,所以C国间谍头子Derek和他手下Tidy又开始忙乎了.A国在海岸线沿直线布置了N个工兵营地,Derek和T ...

  2. hdu1754(简单线段树)

    I Hate It Time Limit: 9000/3000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total ...

  3. hdu1754 I hate it线段树模板 区间最值查询

    题目链接:这道题是线段树,树状数组最基础的问题 两种分类方式:按照更新对象和查询对象 单点更新,区间查询; 区间更新,单点查询; 按照整体维护的对象: 维护前缀和; 维护区间最值. 线段树模板代码 # ...

  4. HDU1754 I Hate It (线段树单点修改+区间查询)

    题目链接:传送门 解题思路:从题目中我们很明显知道只有两种操作,第一种是查询\([A,B]\)范围内学生成绩的最大值,典型的RMQ,第二种操作是将A的成绩改为B,而不是改为B的成绩,请仔细体会.(当然 ...

  5. 数据结构---线段树

    线段树 转载请注明出处,谢谢!http://blog.csdn.net/metalseed/article/details/8039326  持续更新中···   一:线段树基本概念 1:概述 线段树 ...

  6. 【转】线段树题目 汇总 讲解(by not only success)

    转载自:http://www.notonlysuccess.com/ 非常喜欢他的代码风格以及简洁的思路,感谢notonlysuccess! PS:他的个人网站好像是上不去了-.- 线段树 很早前写的 ...

  7. HDU 1754 I Hate It 线段树

    I Hate It Description 很多学校流行一种比较的习惯.老师们很喜欢询问,从某某到某某当中,分数最高的是多少. 这让很多学生很反感. 不管你喜不喜欢,现在需要你做的是,就是按照老师的要 ...

  8. 数据结构 —— 线段树

    [概述] 线段树是一种二叉搜索树,其存储的是一个区间的信息,每个结点以结构体的形式去存储,每个结构体包含三个元素:区间左端点.区间有端点.该区间要维护的信息(视实际情况而定),其基本思想是分治的思想. ...

  9. ACM大牛总结的线段树专辑

    https://blog.csdn.net/qq_25605637/article/details/46967529 [完全版]线段树 很早前写的那篇线段树专辑至今一直是本博客阅读点击量最大的一片文章 ...

最新文章

  1. 求字符串中汉字的个数
  2. docker基础知识之挂载本地目录
  3. codeforces 7.22 F Pairwise Modulo
  4. CentOs7 无可用“Chinese Support“
  5. 计算机打字比赛活动策划书怎么写,打字比赛策划书范文.docx
  6. 绑定注意事项——数据源的属性
  7. 研究生第一篇学术论文常犯问题总结
  8. c语言数字排列和算法思路,冒泡排序、快速排序算法理解及C程序实现
  9. 第三周读书笔记《程序员修炼之道》
  10. 文件缓存、内存缓存与静态化页面的取舍
  11. 阿拉伯数字转换大写例如:120转一百二十
  12. 不错的Unity教程
  13. excel 比对多列数据
  14. 基于GMT绘制行政区划图
  15. spring批量写入mysql数据库_spring boot 向数据库写入海量数据
  16. HTML5+CSS3小实例:炫彩流光圆环加载动画
  17. 岌岌可危 中立之争决定云计算未来
  18. 广东省教育局 计算机,广东省教育厅关于公布第十七届广东省中小学电脑制作活动获奖结果的通知...
  19. python3爬取网易云歌单数据清洗_利用Python网络爬虫抓取网易云歌词
  20. 入门图形学:平直着色和平滑着色

热门文章

  1. 西瓜创客python编程进阶收费_西瓜创客和编程猫有什么不同?哪个更值得报名?...
  2. java timezone id_java.util.TimeZone.setID()方法实例
  3. GDB与远程(交叉)GDB调试
  4. chdir函数_PHP chdir()函数与示例
  5. C ++ STL中的set :: upper_bound()函数
  6. pip安装deb_技术|如何在 Ubuntu 上安装 pip
  7. 哈希表 - (代码、分析 )
  8. php数组的声明和类型
  9. linux 命令修改网络,linux网络命令学习
  10. 双层玻璃窗的功效模型matlab,数学建模:双层玻璃窗的功效,80人%的人搞不懂数学的应用价值...