线段树模板hdu 1754:I Hate It
I Hate It
Time Limit: 9000/3000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 100523 Accepted Submission(s): 37845
这让很多学生很反感。
不管你喜不喜欢,现在需要你做的是,就是按照老师的要求,写一个程序,模拟老师的询问。当然,老师有时候需要更新某位同学的成绩。
在每个测试的第一行,有两个正整数 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
分析:此题为经典线段树模板题, 标志性的更新和查询操作, 如果无数条更新和查询操作时, 想到线段树, 很可能就是一道与此题类似的线段树题欧。。
ac代码:
#include <iostream>
#include <cstdio>
#include <algorithm>
using namespace std; const int N=+;
struct tree{
int l, r, maxn;
};
tree t[N*];
int ans; void build(int m, int l, int r)
{
t[m].l = l;
t[m].r = r;
if(l==r)
{
scanf("%d", &t[m].maxn);
return;
}
int mid = (l + r) >> ;
build(m<<, l, mid);
build(m<<|, mid+, r);
t[m].maxn = max(t[m<<].maxn, t[m<<|].maxn);
}
void U(int m, int a, int b)
{
if(t[m].l == t[m].r && t[m].l == a)
{
t[m].maxn = b;
return;
}
int mid = (t[m].l + t[m].r) >> ;
if(a <= mid)
U(m<<, a, b);
else
U(m<<|, a, b);
t[m].maxn = max(t[m<<].maxn, t[m<<|].maxn);
}
void Q(int m, int l, int r)
{
if(t[m].l == l && t[m].r == r)
{
ans = max(ans, t[m].maxn);
return;
}
int mid = (t[m].l + t[m].r) >> ;
if(r <= mid)
Q(m<<, l, r);
else if(l >= mid + )
Q(m<<|, l, r);
else
{
Q(m<<, l, mid);
Q(m<<|, mid+, r);
}
}
int main()
{
int n, m;
while(scanf("%d%d", &n, &m)!=EOF)
{
build(, , n);
for(int i=;i<m;i++)
{
getchar();
char c;
int a, b;
scanf("%c", &c);
scanf("%d%d", &a, &b);
if(c == 'Q')
{
ans = ;
Q(, a, b);
printf("%d\n", ans);
}
else
U(, a, b);
}
}
return ;
}
线段树模板hdu 1754:I Hate It的更多相关文章
- 线段树模板 hdu 1166 敌兵布阵
敌兵布阵 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submis ...
- 线段树(hdu 1754 i hate it)
I Hate It Time Limit: 3000MS Memory Limit: 32768 K Description 很多学校流行一种比较的习惯.老师们很喜欢询问,从某某到某某当中,分 ...
- 线段树模板hdu 1166:敌兵布阵
敌兵布阵 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submis ...
- 裸裸的线段树(hdu 1754)
线段树的第一发. 哪天忘了还能够让自己找找回顾. 线段树操作: build : 建树. update:点改动: query:查询 Input 在每一个測试的第一行,有两个正整数 N 和 M ( 0& ...
- hdu 4819 二维线段树模板
/* HDU 4819 Mosaic 题意:查询某个矩形内的最大最小值, 修改矩形内某点的值为该矩形(Mi+MA)/2; 二维线段树模板: 区间最值,单点更新. */ #include<bits ...
- HDU 1166 线段树模板&树状数组模板
HDU1166 上好的线段树模板&&树状数组模板 自己写的第一棵线段树&第一棵树状数组 莫名的兴奋 线段树: #include <cstdio> using nam ...
- HDU 1698 Just a Hook (线段树模板题-区间求和)
Just a Hook In the game of DotA, Pudge’s meat hook is actually the most horrible thing for most of t ...
- HDU1166:敌兵布阵(线段树模板)
敌兵布阵 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submis ...
- [AHOI 2009] 维护序列(线段树模板题)
1798: [Ahoi2009]Seq 维护序列seq Time Limit: 30 Sec Memory Limit: 64 MB Description 老师交给小可可一个维护数列的任务,现在小 ...
随机推荐
- Git推送错误Remote: User permission denied错误解决方法
用了别的同事的电脑,推送代码,报错. 解决方法: 修改别人的密码,改成自己的账号和密码就可以了.
- MVC 添加JS,CSS等版本标签
在cshtml文件标签中添加 asp-append-version="true" <img src="~/images/codedigestlogo.png&quo ...
- 在PHP中使用AES加密算法加密数据
算法/模式/填充 16字节加密后数据长度 不满16字节加密后长度 AES/CBC/NoPadding 不支持 AES/CBC/PKCS5Padding AES/CBC/ISO10126Padding ...
- Android Studio运行项目报错:Error:null value in entry: annotationProcessorOutputFolder=null的解决方案
一般是在Android studio异常退出(比如强制关机)后,重新打开后运行项目出现该问题. 解决方案 删除项目根目录的.gradle文件夹,然后Clean Project —— Rebulid ...
- jQuery插件学习之选项卡Tab
在网站开发中经常会用到选项卡功能,为了节省一下写代码时间,封装了一下tab插件,方便调用. 来看一下效果: tab-1 tab-2 tab-3 tabs-1-panel tabs-2-panel ta ...
- centos中less翻页查询的用法
用法实例: cat 21342.log | less
- web.xml中使用web前缀配置无法访问controller
<web:context-param> <web:param-name>contextConfigLocation</web:param-name> <web ...
- 【未解决】Linux下PHP安装扩展Mysql的问题
[步骤分析] 1.在PHP源码包下定位到指定位置:源码包/ext/mysqli 注1:网上很多地方红字部分是mysql,其实PHP5以后已经不用mysql了. 2.运行:/usr/local/php/ ...
- hdu 4192 (表达式求值)
<题目链接> <转载于 >>> > 题目大意: 给你n个数,和一个最终的结果,再给你一个含有n个不同变量的式子,问你这个式子最终能否得到指定的答案. 解题分 ...
- SpringMvc接口中转设计(策略+模板方法)
一.前言 最近带着两个兄弟做支付宝小程序后端相关的开发,小程序首页涉及到很多查询的服务.小程序后端服务在我司属于互联网域,相关的查询服务已经在核心域存在了,查询这块所要做的工作就是做接口中转.参考了微 ...