代码线段树入门整理中有介绍、

 #include<cstdio>
#include<algorithm>
#include<cstring>
#include<cmath>
using namespace std;
const int MAXNODE=<<;
const int MAX=;
struct NODE{
int left,right;
int value;
}node[MAXNODE];
int father[MAX];
void buildtree(int i,int left,int right)
{
node[i].left=left;
node[i].right=right;
node[i].value=;
if(left==right){
father[left]=i;
return;
}
buildtree(i<<, left, (int)floor( (right+left) / 2.0));
buildtree((i<<) + , (int)floor( (right+left) / 2.0) + , right); }
void updatatree(int ri)
{
if(ri==) return;
int fi=ri/;
int a=node[fi<<].value;
int b=node[(fi<<)+].value;
node[fi].value=a>b?a:b;
updatatree(ri/);
}
int maxn;
void query(int i,int l,int r)
{
if(node[i].left==l&&node[i].right==r){
maxn=(maxn<node[i].value)?node[i].value:maxn;
return;
}
i=i<<;
if(l<=node[i].right)
if(r<=node[i].right)
query(i,l,r);
else
query(i,l,node[i].right);
i+=;
if(r>=node[i].left)
if(l>=node[i].left)
query(i,l,r);
else
query(i,node[i].left,r);
}
int main()
{
int n,m;
while(~scanf("%d %d",&n,&m)){
buildtree(,,n);
int grade;
for(int i=;i<=n;++i){
scanf("%d",&grade);
node[father[i]].value=grade;
updatatree(father[i]);
}
while(m--){
int x,y;char str[];
scanf("%s %d %d",str,&x,&y);
if(str[]=='U'){
node[father[x]].value=y;
updatatree(father[x]);
}
else{
maxn=;
query(,x,y);
printf("%d\n",maxn);
}
}
}
}

HDU 1754线段树基本操作,建树,更新,查询的更多相关文章

  1. hdu 1754 线段树(Max+单点修改)

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

  2. Q - Play With Sequence HDU - 3971 线段树 重新排序建树

    Q - Play With Sequence HDU - 3971 这个题目是一个线段树,比较特别的线段树,就是c询问一定次数之后重新排序建树来优化减低复杂度. 第一次碰到这种题目有点迷. 这个题目写 ...

  3. HDU(1754),线段树,单点替换,区间最值

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1754 线段树模板题,update功能是单点替换,query是访问区间最大值. #include < ...

  4. HDU 4893 线段树的 点更新 区间求和

    Wow! Such Sequence! Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Oth ...

  5. HDU - 1754 线段树-单点修改+询问区间最大值

    这个也是线段树的经验问题,待修改的,动态询问区间的最大值,只需要每次更新的时候,去把利用子节点的信息进行修改即可以. 注意更新的时候区间的选择,需要对区间进行二分. #include<iostr ...

  6. hdu 1754 线段树入门

    线段树点修改  区间最大值查询 #include <cstdio> #include <cstdlib> #include <cmath> #include < ...

  7. HDU 1754 线段树 单点跟新 HDU 1166 敌兵布阵 线段树 区间求和

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

  8. hdu 1754 线段树(单点替换 区间最值)

    Sample Input5 61 2 3 4 5Q 1 5 //1-5结点的最大值U 3 6 //将点3的数值换成6Q 3 4Q 4 5U 2 9Q 1 5 Sample Output5659 # i ...

  9. HDU 1754 线段树入门解题报告

    ---恢复内容开始--- 题意:给定区间,每个人的成绩, Q次询问,求每次询问区间中的最大值 思路:构造线段树 代码: #include<stdio.h> #include<algo ...

随机推荐

  1. Vue--vue中的组件、组件绑定事件和数据、私有组件、子组件,父子组件参数互传

    一.公有组件以及组件的使用和特点 <!DOCTYPE html> <html lang="en"> <head> <meta charse ...

  2. Python操作SQLite数据库的方法详解

    Python操作SQLite数据库的方法详解 本文实例讲述了Python操作SQLite数据库的方法.分享给大家供大家参考,具体如下: SQLite简单介绍 SQLite数据库是一款非常小巧的嵌入式开 ...

  3. MVVMDemo

    QueryCommand.cs using System;using System.Collections.Generic;using System.Linq;using System.Text;us ...

  4. Eclipse创建jsp web项目

    Eclipse 是一个开放源代码的.基于Java的可扩展开发平台.就其本身而言,它只是一个框架和一组服务,用于通过插件组件构建开发环境.幸运的是,Eclipse 附带了一个标准的插件集,包括Java开 ...

  5. Python 使用正则表达式抽取数据

  6. Leetcode868.Binary Gap二进制间距

    给定一个正整数 N,找到并返回 N 的二进制表示中两个连续的 1 之间的最长距离. 如果没有两个连续的 1,返回 0 . 示例 1: 输入:22 输出:2 解释: 22 的二进制是 0b10110 . ...

  7. 苹果建议开发者在iOS 7正式发布之前把应用提交至App Store

    今早在给开发者的邮件中,苹果建议开发者在下周9月18日正式发布iOS 7之前把应用提交至App Store.邮件特别提到了iOS 7的新功能,还提到了充分利用iPhone 5S功能的新API,比如M7 ...

  8. 大数据ETL详解

    ETL是BI项目最重要的一个环节,通常情况下ETL会花掉整个项目的1/3的时间,ETL设计的好坏直接关接到BI项目的成败.ETL也是一个长期的过程,只有不断的发现问题并解决问题,才能使ETL运行效率更 ...

  9. jQuery图片从下往上滚动效果

    在线演示 本地下载

  10. python 利用csv模块导入数据