HDU - 1754 A - I Hate It 线段树
I Hate It
Time Limit: 9000/3000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 94142 Accepted Submission(s): 35658
这让很多学生很反感。
不管你喜不喜欢,现在需要你做的是,就是按照老师的要求,写一个程序,模拟老师的询问。当然,老师有时候需要更新某位同学的成绩。
在每个测试的第一行,有两个正整数 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。
1 2 3 4 5
Q 1 5
U 3 6
Q 3 4
Q 4 5
U 2 9
Q 1 5
6
5
9
Hint
Huge input,the C function scanf() will work better than cin
线段树的一道简单题,详细看代码
#include<stdio.h>
#include<string.h>
#include<iostream>
using namespace std;
#define MAXN 200010 int n, m;
int a[MAXN];
struct node{
int l, r, max;
}tree[MAXN<<2];
char ch;
int max(int a, int b)
{
if (a > b)
return a;
else
return b;
}
void build(int k, int l, int r)
{
tree[k].l = l; tree[k].r = r;
if (l == r)
{
tree[k].max = a[l];
return;
}
int mid = (l + r) >> 1;
build(k << 1, l, mid); build(k << 1|1, mid+1, r);
tree[k].max = max(tree[k << 1].max, tree[k << 1 | 1].max);
}
void prework()
{
for (int i = 1; i <= n; i++)
scanf("%d", &a[i]);
memset(tree, 0, sizeof(tree));
build(1, 1, n);
}
void change(int k, int d, int x)
{
if (tree[k].l == tree[k].r&&tree[k].r == d)
{
tree[k].max = x;
return;
}
int mid = (tree[k].l + tree[k].r) >> 1;
if (d >= tree[k].l&&d <= mid)
change(k << 1, d, x);
else
change(k << 1 | 1, d, x);
tree[k].max = max(tree[k << 1].max, tree[k << 1 | 1].max);
}
int query(int k, int l, int r)
{
int maxnum;
if (tree[k].l == l&&tree[k].r == r)
return tree[k].max;
int mid = (tree[k].l + tree[k].r) >> 1;
if (r <= mid)
maxnum = query(k << 1, l, r);
else if (l >= mid + 1)
maxnum = query(k << 1 | 1, l, r);
else
maxnum = max(query(k << 1, l, mid), query(k << 1 | 1, mid+1, r));
return maxnum;
}
void mainwork()
{
int d, x;
for (int i = 1; i <= m; i++)
{
cin>>ch>>d>>x;
if (ch == 'Q')
printf("%d\n", query(1, d, x));
else
change(1, d, x);
}
}
int main()
{
while (~scanf("%d%d", &n, &m))
{
prework();
mainwork();
}
return 0;
}
HDU - 1754 A - I Hate It 线段树的更多相关文章
- hdu 1754 I Hate It (模板线段树)
http://acm.hdu.edu.cn/showproblem.php?pid=1754 I Hate It Time Limit: 9000/3000 MS (Java/Others) M ...
- hdu 1754 I Hate It (线段树功能:单点更新和区间最值)
版权声明:本文为博主原创文章.未经博主同意不得转载.vasttian https://blog.csdn.net/u012860063/article/details/32982923 转载请注明出处 ...
- HDU 1754 I Hate It 【线段树单点修改 维护区间最大值】
题目传送门:http://acm.hdu.edu.cn/showproblem.php?pid=1754 I Hate It Time Limit: 9000/3000 MS (Java/Others ...
- hdu 1754 I Hate It (线段树)
原题链接:http://acm.hdu.edu.cn/showproblem.php?pid=1754 线段树的模板题,详细的都写在代码里了 //不知道为什么定义单个字符,用%c输入会超时,换成字符数 ...
- hdu 1754:I Hate It(线段树,入门题,RMQ问题)
I Hate It Time Limit: 9000/3000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total S ...
- HDU 1754 I Hate It(线段树)
点我看题目 题意 :又是一道中问题,我就不说题意了.... 思路 : 线段树,这道题跟1166差不多,改一些地方就差不多了. #include <iostream> #include & ...
- HDU 1754 I Hate It(线段树基础应用)
基础线段树 #include<iostream> #include<cstdio> #include<cstring> using namespace std; # ...
- HDU 1754 I Hate It(线段树之单点更新 区间最值查询)
I Hate It Time Limit: 9000/3000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total S ...
- hdu 1754 I Hate It(线段树之 单点更新+区间最值)
I Hate It Time Limit: 90 ...
随机推荐
- 10 款非常棒的CSS代码格式化工具推荐
如果你刚开始学习CSS,这意味着你的很多代码或结构可能需要优化,比如你可能过多使用了类.添加了多余的间隔或空行等等,这将导致代码臃肿.混乱,可读性和执行效率将大大降低. 本文为你整理了几款CSS工具, ...
- element-UI 表单图片判空验证问题
本文地址:http://www.cnblogs.com/veinyin/p/8567167.html element-UI的表单验证似乎并没有覆盖到文件上传上面,当我们需要在表单里验证图片时,就会出 ...
- 27、增强for循环
增强for循环 使用增强for循环可以简化数组和Collection集合的遍历,格式: for(元素数据类型 变量 : 数组或者Collection集合) { 使用变量即可,该变量就是元素 } 例: ...
- Linux基础-sed+正则表达式
1,删除文件每行的第一个字符:sed -r 's/^.//g' passwd 2,删除文件每行的第二个字符:sed -r 's/^(.)(.)/\2/g' passwd 3,删除文件每行的最后一个字符 ...
- windows 下安装mysqlclient 包
正常情况下是可以直接用 pip install mysqlclient 进行安装的.如果你的机器上安装的既有python3 又有python2.7 的话,建议使用python -m pip insta ...
- Java并发编程(2) AbstractQueuedSynchronizer的设计与实现
一 前言 上一篇分析AQS的内部结构,其中有介绍AQS是什么,以及它的内部结构的组成,那么今天就来分析下前面说的内部结构在AQS中的具体作用(主要在具体实现中体现). 二 AQS的接口和简单示例 上篇 ...
- [转]Linux 线程分离状态
线程的分离与结合 在任何一个时间点上,线程是可结合的(joinable),或者是分离的(detached).一个可结合的线程能够被其他线程收回其资源和杀死:在被其他线程回收之前,它的存储器资源(如栈) ...
- halcon发布
1: halcon发布 : 在MFC程序中 添加 #include "include/halcon/cpp/HalconCpp.h"using namespace Halcon;# ...
- wifi两种工作模式
AP:即无线接入点,是一个无线网络的中心节点.通常使用的无线路由器就是一个AP,其它无线终端 可以通过AP相互连接. STA:即无线站点,是一个无线网络的终端.如笔记本电脑.PDA等. 1>工作 ...
- 微信web开发者工具无法打开的解决方法
参考网址:https://blog.csdn.net/gz506840597/article/details/77915488 我试了上面兄弟说的方法还是无效 下面说说我的方法: 我打开文件所在位置, ...