#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);
}
}
}

线段树hdu1754的更多相关文章

  1. [线段树]HDU-1754板子题入门ver

    HDU-1754 线段树数组请开到四倍 众所周知数组开小会导致re tle wa等一系列问题orz 板子就是板子,数组从零开始或是从一开始都没什么问题,就是2*root+1还是2*root+2的问题. ...

  2. 线段树---HDU1754 I hate it

    这个题也是线段树的基础题,有了上一个题的基础,在做这个题就显得比较轻松了,大体都是一样的,那个是求和,这个改成求最大值,基本上思路差不多,下面是代码的实现 #include <cstdio> ...

  3. 线段树 HDU-1754 I Hate It

    附上原题链接:http://acm.hdu.edu.cn/showproblem.php?pid=1754 Problem Description 很多学校流行一种比较的习惯.老师们很喜欢询问,从某某 ...

  4. 入手线段树 hdu1754

    今天学习了线段树的三个基本操作 建树 更新 查找 先理解下什么是线段树就这个题目而言 如果我们用普通的数组去存放 然后依次遍历访问的话 时间太多了线段树利用了二分的思想 把数据以段的形式进行储存 这样 ...

  5. I Hate It(hdu1754)(线段树区间最大值)

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

  6. HDU1754 && HDU1166 线段树模板题

    HDU1754 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1754 题目分析:对于给出的一个很长的区间,对其进行单点更新值和区间求最大值的操作,由于 ...

  7. HDU1166(线段树 +更新单点,求区间总和)、HDU1754(线段树 + 更新单点,求区间最大值)

    线段树简单应用 先附上几张图便与理解,大佬文章传送门1.传送门2 HDU1166:题目描述 线段树 +更新单点,求区间总和 代码如下(递归版) #include<iostream> #in ...

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

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

  9. hdu1754 基础线段树

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

随机推荐

  1. Bug :”解压压缩文件失败: cpio; 在头中不存在归档“

    问题描述: 在rpm包目录下执行rpm -ivh *rpm -force时,出现标题错误 解决办法: *src.rpm包也就源码包不能被直接进行安装,需要先将src.rpm包进行编译生成二进制的rpm ...

  2. flask开发restful api系列(8)-再谈项目结构

    上一章,我们讲到,怎么用蓝图建造一个好的项目,今天我们继续深入.上一章中,我们所有的接口都写在view.py中,如果几十个,还稍微好管理一点,假如上百个,上千个,怎么找?所有接口堆在一起就显得杂乱无章 ...

  3. Cloudera Search配置

    一.集群机器配置信息 Cloudera集群机器: 10.2.45.104 GBD000.localdomain GBD00010.2.45.105 GBD101.localdomain GBD1011 ...

  4. Linux学习——粘粘今天看的东西

    由二分割表就叧有64 bytes而已,最多叧能容纳四笔分割的记录, 这四个分割的记录被称为主要(Primary)戒延伸(Extended)分割槽.分割槽的最小单位为磁柱(cylinder)请注意, 延 ...

  5. ural 1572 Yekaterinozavodsk Great Well

    #include <cstdio> #include <cstring> #include <cmath> #include <algorithm> # ...

  6. Web Server (IIS) Administration Cmdlets in Windows PowerShell

    https://technet.microsoft.com/en-us/library/ee790599.aspx Web Server (IIS) Administration Cmdlets in ...

  7. 组合索引leaf 数据存储

    1 Z 2 X 3 U 4 T 5 G 6 F 7 C 8 B 9 A 1 A 2 B 3 C 4 D Oracle的索引是以平衡树的方式组织存储的:保存的是索引列的值,以及该行的rowid的一部分( ...

  8. 实现QQslidingMenu侧滑效果学习笔记

    声明:只是自己的学习笔记,所以,只作为博友的参考,不喜勿喷 实现思路: 自定义继承HorizontalScrollView的控件 项目github地址: https://github.com/ysno ...

  9. 【2013南京区域赛】部分题解 hdu4802—4812

    上周末打了一场训练赛,题目是13年南京区域赛的 这场题目有好几个本来应该是我擅长的,但是可能是太久没做比赛了各种小错误代码写的也丑各种warusn trush搞得人很不爽 全场题之一的1002也没有想 ...

  10. 算法导论(第三版)Problems2(归并插入排序、数列逆序计算)

    讨论内容不说明,仅提供相应的程序. 2.1:归并插入排序θ(nlgn) void mergeInsertionSort(int a[], int l, int r, int k) { int m; & ...