---恢复内容开始---

题意:给定区间,每个人的成绩, Q次询问,求每次询问区间中的最大值

思路:构造线段树

代码:

#include<stdio.h>
#include<algorithm>
#include<string>
#include<iostream>
using namespace std; int n, m, ans;
string str; struct Tree
{
int left, right, maxx;
}tree[ * ]; //线段树开4倍空间 void build(int left, int right, int k)
{
tree[k].left = left, tree[k].right = right;
if(left == right)
{
scanf("%d", &tree[k].maxx);
return ;
}
int mid = (left + right) / ;
build(left, mid, * k);
build(mid + , right, * k + );
tree[k].maxx = max(tree[ * k].maxx, tree[ * k + ].maxx); //向上回溯最大值记录
} void update(int find_node, int up_num, int k)//单点修改
{
if(tree[k].left == find_node && tree[k].right == find_node)
{
tree[k].maxx = up_num;
return ;
}
int mid = (tree[k].left + tree[k].right) / ;
if(find_node <= mid)
update(find_node, up_num, * k);
else
update(find_node, up_num, * k + ); //修改过后回溯修改最大值
tree[k].maxx = max(tree[ * k].maxx, tree[ * k + ].maxx);
} void query(int find_left, int find_right, int k)//区间查询取最大值
{
if(find_left == tree[k].left && find_right == tree[k].right)
{
ans = max(ans, tree[k].maxx);
return ;
}
int mid = (tree[k].left + tree[k].right) / ;
if(find_right <= mid)
query(find_left, find_right, * k);
else if(find_left > mid)
query(find_left, find_right, * k + );
else
{
query(find_left, mid, * k);
query(mid + , find_right, * k + );
}
} int main()
{
int a, b;
while(scanf("%d%d", &n, &m)!=EOF)
{
build(, n, );
for(int i = ; i <= m; i ++)
{
cin >> str;
if(str == "U")
{
scanf("%d%d", &a, &b);
update(a, b, );
}
else
{
ans = -;
scanf("%d%d", &a, &b);
query(a, b, );
printf("%d\n", ans);
}
}
}
return ;
}

HDU 1754 线段树入门解题报告的更多相关文章

  1. hdu 1754 线段树入门

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

  2. POJ 3264 线段树入门解题报告

    题意:给n个值, Q次询问, 每次询问给定一个区间, 要求输出该区间最大最小值之差 思路:暴力的话每次询问都要遍历多次for循环一定会超时, 用线段树记录区间的信息(左边界右边界, 该区间最大值最小值 ...

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

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

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

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

  5. HDU 1754线段树基本操作,建树,更新,查询

    代码线段树入门整理中有介绍. #include<cstdio> #include<algorithm> #include<cstring> #include< ...

  6. hdu 1754 I Hate It 解题报告(线段树 代码+注释)

    题目链接:传送门 I Hate It Time Limit: 9000/3000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Other ...

  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 线段树-单点修改+询问区间最大值

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

  9. [NOIP2016 DAY1 T2]天天爱跑步-[差分+线段树合并][解题报告]

    [NOIP2016 DAY1 T2]天天爱跑步 题面: B[NOIP2016 DAY1]天天爱跑步 时间限制 : - MS 空间限制 : 565536 KB 评测说明 : 2s Description ...

随机推荐

  1. 将DataTable转换为List<T>对象遇到问题:类型“System.Int64”的对象无法转换为类型“System.Int32”。

    可以利用反射将DataTable转换为List<T>对象:原始链接http://www.jb51.net/article/67386.htm 但是该方法在DataTable里某个字段类型是 ...

  2. robot总结

    1 搭建环境地址 http://www.cnblogs.com/yufeihlf/p/5945102.html 2 页面描述 https://www.cnblogs.com/yufeihlf/p/59 ...

  3. css实现右尖括号样式

    .arrow{ width: 6px; height: 6px; border-top: 1px solid #999; border-right: 1px solid #999; transform ...

  4. Python学习笔记三

    一. 为什么要使用函数? 函数可以方便阅读代码. 函数可以减少重复代码. 函数可以减少管理操作,减少修改操作. 二. 函数分类: 内置函数:len()   sum()   max()   min() ...

  5. 饮冰三年-人工智能-Python-21 Python数据库MySql

    一:下载与安装 1:下载地址:https://dev.mysql.com/downloads/mysql/ 2:安装MySql 打开下载文件解压到指定文件目录.(我这里解压目录为D:\MySql\my ...

  6. 关于saltstack

    配置Saltstack master 服务器 master服务器:saltstack.master  172.18.1.103 minion客户端:minion01              172. ...

  7. ~/Library/MobileDevice/Provisioning Profiles

    ~/Library/MobileDevice/Provisioning Profiles

  8. Java NIO系列1-概观

    Java NIO系列1-概观 Java NIO.中间的N你既可以理解为(new),也就是新的IO,相对于java1.5之前的IO它确实是新的;也可以理解为(no-blocking),也就是非阻塞的IO ...

  9. Codeforces 1109D Sasha and Interesting Fact from Graph Theory (看题解) 组合数学

    Sasha and Interesting Fact from Graph Theory n 个 点形成 m 个有标号森林的方案数为 F(n, m) = m * n ^ {n - 1 - m} 然后就 ...

  10. leetcode刷题第一日<两数和问题>

    开始就用到了c++的哈希表是真的恶心,首先学习一波基础知识 https://blog.csdn.net/u010025211/article/details/46653519 下面放下大佬的代码 cl ...