二叉树:HDU1754

很多学校流行一种比较的习惯。老师们很喜欢询问,从某某到某某当中,分数最高的是多少。 
这让很多学生很反感。 

不管你喜不喜欢,现在需要你做的是,就是按照老师的要求,写一个程序,模拟老师的询问。当然,老师有时候需要更新某位同学的成绩。

Input

本题目包含多组测试,请处理到文件结束。 
在每个测试的第一行,有两个正整数 N 和 M ( 0<N<=200000,0<M<5000 ),分别代表学生的数目和操作的数目。 
学生ID编号分别从1编到N。 
第二行包含N个整数,代表这N个学生的初始成绩,其中第i个数代表ID为i的学生的成绩。 
接下来有M行。每一行有一个字符 C (只取'Q'或'U') ,和两个正整数A,B。 
当C为'Q'的时候,表示这是一条询问操作,它询问ID从A到B(包括A,B)的学生当中,成绩最高的是多少。 
当C为'U'的时候,表示这是一条更新操作,要求把ID为A的学生的成绩更改为B。 

Output

对于每一次询问操作,在一行里面输出最高成绩。

Sample Input

5 6
1 2 3 4 5
Q 1 5
U 3 6
Q 3 4
Q 4 5
U 2 9
Q 1 5

Sample Output

5
6
5
9

问题链接:https://cn.vjudge.net/contest/283761#problem/H

AC代码:

#include<iostream>
#include<cstring>
#include<algorithm>
#include<stdio.h>
using namespace std;
struct Tree
{Tree() { memset(this, 0, sizeof(this)); }int left, right,sum,maxn,score;
};
Tree tree[800020];
int pre[200005];
void update(int t)
{tree[t].maxn = max(tree[t * 2].maxn, tree[t * 2 + 1].maxn);tree[t].sum = tree[t * 2].sum + tree[t * 2 + 1].sum;
}
void build_tree(int t,int left,int right)
{tree[t].left = left;tree[t].right = right;if (left == right){tree[t].sum = pre[left];tree[t].maxn = pre[left];return;}int mid = (left + right) / 2;build_tree(t * 2, left, mid);build_tree(t * 2 + 1, mid + 1, right);update(t);
}
int inquiry_max(int t, int lef, int rig)
{if (lef == tree[t].left&&rig == tree[t].right){return tree[t].maxn;}int mid = (tree[t].left+tree[t].right) / 2;if (rig <= mid)return inquiry_max(t * 2, lef, rig);else if (mid < lef)return inquiry_max(t * 2 + 1, lef, rig);else return max(inquiry_max(t * 2, lef, mid), inquiry_max(t * 2 + 1, mid+1, rig));
}
void change(int t, int target, int figure)
{if (tree[t].left == target && tree[t].right == target){tree[t].score = figure;tree[t].maxn = figure;return;}int mid = (tree[t].left + tree[t].right) / 2;if (target <= mid)change(t * 2, target, figure);else change(t * 2 + 1, target, figure);update(t);
}
int main()
{int n, m;while (cin >> n >> m){for (int i = 1; i <= n; i++)scanf("%d", &pre[i]);build_tree(1, 1, n);int a=0, b=0;char c=0;while (m--){scanf("%s%d%d", &c, &a, &b);switch (c){case 'Q': printf("%d\n", inquiry_max(1, a, b)); break;case 'U':change(1, a, b); break;}}	}
}

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/330328.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

转:微服务设计、拆分原则

转自&#xff1a; https://www.cnblogs.com/guanghe/p/10978349.html 一、AKF拆分原则 业界对于可扩展系统架构设计有一个朴素的理念&#xff1a;通过加机器就可以解决容量和可用性问题。 这一理念在云计算概念疯狂流行的今天&#xff0c;得到了广泛的认可&#xff0c;对于一个…

漫画:什么是中间人攻击

转载自 漫画&#xff1a;什么是中间人攻击故事发生在上世纪40年代......在解放战争初期&#xff0c;东北牡丹江一带&#xff0c;奶头山有一个土匪副官叫栾平。他计划将包含重要信息的先遣图&#xff0c;献给威虎山的土匪头子座山雕。而后栾平被共军抓获&#xff0c;侦查员杨子荣…

微信小程序的setData

1.setData&#xff08;&#xff09;中修改为bool类型不要加" " 例&#xff1a;setData({"a":false}) 2.修改以变量作为索引值的数组时的语法为 this.setData({ [ judge[${current}] ]: true })

转:AKF 扩展立方体

转&#xff1a; https://www.cnblogs.com/fengyc/p/12286726.html AKF 扩展立方体&#xff08;AKF Scale Cube&#xff09;是一个描述从单体应用到可扩展架构的模型&#xff0c;见 (https://akfpartners.com/growth-blog/scale-cube)[https://akfpartners.com/growth-blog/scal…

漫画:三分钟了解敏捷开发

转载自 漫画&#xff1a;三分钟了解敏捷开发 什么是敏捷开发&#xff1f; 敏捷开发&#xff08;Agile&#xff09;是一种以人为核心、迭代、循序渐进的开发方法。 在敏捷开发中&#xff0c;软件项目的构建被切分成多个子项目&#xff0c;各个子项目的成果都经过测试&#xff0c…

微信小程序数组的坑

定义和用法 splice() 方法用于添加或删除数组中的元素。 注意&#xff1a;这种方法会改变原始数组。 返回值 如果仅删除一个元素&#xff0c;则返回一个元素的数组。 如果未删除任何元素&#xff0c;则返回空数组。 主要&#xff1a;array.splice(index,howmany&#xff09…

转: 理解RESTful架构

转自&#xff1a; http://www.ruanyifeng.com/blog/2011/09/restful.html 作者&#xff1a; 阮一峰 日期&#xff1a; 2011年9月12日 越来越多的人开始意识到&#xff0c;网站即软件&#xff0c;而且是一种新型的软件。 这种"互联网软件"采用客户端/服务器模式&a…

Git 12 岁了,送给你 12 个 Git 使用技巧

转载自 Git 12 岁了&#xff0c;送给你 12 个 Git 使用技巧Git&#xff0c;一个分布式版本控制系统&#xff0c;它已经成为了开源世界的源码控制默认工具&#xff0c;在4月7号12岁了。但是使用Git中更另人沮丧的是&#xff0c;你需要了解多少才能让你更有效的使用它。同时这也是…

转:Kafka、RabbitMQ、RocketMQ等消息中间件的介绍和对比

转自&#xff1a; https://blog.csdn.net/yunfeng482/article/details/72856762 前言 在分布式系统中,我们广泛运用消息中间件进行系统间的数据交换,便于异步解耦。现在开源的消息中间件有很多,前段时间产品 RocketMQ (MetaQ的内核) 也顺利开源,得到大家的关注。 概念 MQ简…

微信小程序定时器setInterval()的使用注意事项

setInterval&#xff08;function(){}, number 时间间隔/ms&#xff09; 注意在setInterval中定义的函数中使用 this 指向的是该计时器&#xff0c;若要用到页面数据应如下操作&#xff1a; let thatthis setInterval(function(){ that.data.a0; },number 时间间隔/ms) …

图解分布式架构的演进

转载自 图解分布式架构的演进一、什么是分布式架构分布式系统&#xff08;distributed system&#xff09; 是建立在网络之上的软件系统。内聚性&#xff1a;是指每一个数据库分布节点高度自治&#xff0c;有本地的数据库管理系统。透明性&#xff1a;是指每一个数据库分布节点…

转:微服务架构:BFF和网关是如何演化出来的?(这篇文章相当棒)

转自&#xff1a; https://juejin.im/entry/6844903806208049159 这篇文章写得非常棒&#xff0c;从服务&#xff0c;到bff&#xff0c; 到gateway 的一步步演化&#xff0c;描述的非常清晰易懂。 1、介绍 BFF(Backend for Frontend)和网关Gateway是微服务架构中的两个重要概…

微信小程序的坑

<input>组件后台接受到的是字符串类型&#xff0c;若要用数字类型应用Number()进行转化 微信小程序中许多API会是页面的 this 转向应注意用 let that this 来获取页面的指针&#xff01;

实现滚到div时淡入效果

首先实现淡入的动画 CSS代码如下&#xff1a; keyframes float { from { position: relative; margin-top:200px; opacity: 0; } to { position: relative; margin-top: 50px; opacity: 1; } } 接下来用JS判断当前滚动的位置并加入…

高级 Java 面试通关知识点整理

转载自 高级 Java 面试通关知识点整理1、常用设计模式单例模式&#xff1a;懒汉式、饿汉式、双重校验锁、静态加载&#xff0c;内部类加载、枚举类加载。保证一个类仅有一个实例&#xff0c;并提供一个访问它的全局访问点。代理模式&#xff1a;动态代理和静态代理&#xff0c;…

windows查找端口占用并杀死端口进程

tasklist 查看进程netstat -ano|findstr "8080" 查找端口 8080 占用信息&#xff1b; tasklist|findstr 7176 查找进程id为 7176的进程信息&#xff1b; taskkill /F /PID 7176 杀死进程7176

Angular项目打包到nginx部署过程

Angular项目打包到nginx部署过程 一. 打包Angluar ng build,会在项目文件夹下生成dist文件&#xff0c;里面是打包后的文件 二. 部署nginx 在nginx官网中下载nginx 把dist文件夹下的打包文件拷贝到nginx/html下并重命名为myProj 修改conf/nginx.conf文件 location / {root…

SpringMVC表单验证器的使用

转载自 SpringMVC表单验证器的使用本章讲解SpringMVC中怎么通过注解对表单参数进行验证。 SpringBoot配置 使用springboot&#xff0c; spring-boot-starter-web会自动引入 hiberante-validator, validation-api依赖。 在 WebMvcConfigurerAdapter实现类里面添加验证器及国际化…

转-Kafka【第一篇】Kafka集群搭建

转自&#xff1a; https://www.cnblogs.com/luotianshuai/p/5206662.html Kafka【第一篇】Kafka集群搭建 Kafka初识 1、Kafka使用背景 在我们大量使用分布式数据库、分布式计算集群的时候&#xff0c;是否会遇到这样的一些问题&#xff1a; 我们想分析下用户行为&#xf…

Angular 应用解决跨域访问的问题

设置反向代理 原理是设置反向代理服务器&#xff0c;让 Angular 应用都访问自己的服务器中的API&#xff0c;而这类API都会被反向代理服务器转发到 Java 服务API中&#xff0c;而这个过程对于 Angular 应用是无感知的。 业界经常是采用 NGINX 服务来承担反向代理的职责。而在 …