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

题意:给定区间,每个人的成绩, 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. python基础之常用关键字总结

    前言 到python3.6为止,python内置的关键字有33个,比python2.7的版本多了2个.下面总结一下python3的关键字的使用. python内置关键字 解释器在加载上下文的时候,如果 ...

  2. EurekaClient项目启动报错Invocation of destroy method failed on bean with name 'scopedTarget.eurekaClient': org.springframework.beans.factory.BeanCreationNotAllowedException: Error creating bean with name 'e

    Disconnected from the target VM, address: '127.0.0.1:51233', transport: 'socket' Eureka Client的使用 使用 ...

  3. Java Spring Boot VS .NetCore (三)Ioc容器处理

    Java Spring Boot VS .NetCore (一)来一个简单的 Hello World Java Spring Boot VS .NetCore (二)实现一个过滤器Filter Jav ...

  4. mysql根据分组和条件查询以后如何统计记录的条数

    1.子查询,查询出的数据随便起一个别名,然后根据分组和条件查询出的数据,作为一个具有一列的一个表,然后外面的查询查询这个数据表的这一列的总数,即可. SELECT COUNT( * ) FROM ( ...

  5. [转] 从零构建 vue2 + vue-router + vuex 开发环境到入门,实现基本的登录退出功能

    这是一个创建于 738 天前的主题,其中的信息可能已经有所发展或是发生改变. 前言 vue2 正式版已经发布将近一个月了, 国庆过后就用在了公司的两个正式项目上, 还有一个项目下个月也会采用 vue2 ...

  6. const 成员函数

    我们知道,在成员函数中,如果没有修改成员变量,应该给成员函数加上 const 修饰符,例如 #include <iostream> using namespace std; class F ...

  7. sklearn交叉验证-【老鱼学sklearn】

    交叉验证(Cross validation),有时亦称循环估计, 是一种统计学上将数据样本切割成较小子集的实用方法.于是可以先在一个子集上做分析, 而其它子集则用来做后续对此分析的确认及验证. 一开始 ...

  8. Centos7/RHEL7 开启kdump

    Kdump是一种基于kexec的Linux内核崩溃捕获机制,简单来说系统启动时会预留一块内存,当系统崩溃调用命令kexec(kdump kernel)在预留的内存中启动kdump内核, 该内核会将此时 ...

  9. 20175312 2018-2019-2 《Java程序设计》结对编程练习_四则运算(第二周:整体性总结)

    20175312 2018-2019-2 <Java程序设计>结对编程练习_四则运算(第二周:整体性总结) 结对对象与其博客链接 20175309 刘雨恒:https://www.cnbl ...

  10. 动态规划——Valid Permutations for DI Sequence

    We are given S, a length n string of characters from the set {'D', 'I'}. (These letters stand for &q ...