hdu 1754:I Hate It(线段树,入门题,RMQ问题)
I Hate It
Time Limit: 9000/3000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 33726 Accepted Submission(s): 13266
这让很多学生很反感。
不管你喜不喜欢,现在需要你做的是,就是按照老师的要求,写一个程序,模拟老师的询问。当然,老师有时候需要更新某位同学的成绩。
在每个测试的第一行,有两个正整数 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。
Huge input,the C function scanf() will work better than cin
#include <stdio.h>
#define MAXSIZE 200000
struct Node{
int left,right;
int n;
};
Node a[MAXSIZE*+];
void Init(Node a[],int L,int R,int d) //初始化线段树
{
if(L==R){ //当前节点没有儿子节点,即递归到叶子节点。递归出口
a[d].left = L;
a[d].right = R;
a[d].n = ;
return ;
} int mid = (L+R)/; //初始化当前节点
a[d].left = L;
a[d].right = R;
a[d].n = ; Init(a,L,mid,d*); //递归初始化当前节点的儿子节点
Init(a,mid+,R,d*+); }
void Update(Node a[],int L,int R,int d,int x) //对区间[L,R]插入值x,从节点d开始更新。
{
if(L==a[d].left && R==a[d].right){ //插入的区间匹配,则直接修改该区间值
a[d].n = x;
return ;
}
if(x>a[d].n) //沿路节点比该值小的都重新赋值
a[d].n = x;
int mid = (a[d].left + a[d].right)/;
if(R<=mid){ //中点在右边界R的右边,则应该插入到左儿子
Update(a,L,R,d*,x);
}
else if(mid<L){ //中点在左边界L的左边,则应该插入到右儿子
Update(a,L,R,d*+,x);
}
else { //否则,中点在待插入区间的中间
Update(a,L,mid,d*,x);
Update(a,mid+,R,d*+,x);
}
}
int Query(Node a[],int L,int R,int d) //查询区间[L,R]的值,从节点d开始查询
{
if(L==a[d].left && R==a[d].right){ //查找到区间,则直接返回该区间值
return a[d].n;
}
int mid = (a[d].left + a[d].right)/;
if(R<=mid){ //中点在右边界R的右边,则应该查询左儿子
return Query(a,L,R,d*);
}
else if(mid<L){ //中点在左边界L的左边,则应该查询右儿子
return Query(a,L,R,d*+);
}
else { //中点在待查询区间的中间,左右孩子都查找
int A = Query(a,L,mid,d*);
int B = Query(a,mid+,R,d*+);
return A>B?A:B;
}
}
int main()
{
int i,n,m,A,B;
char c;
while(scanf("%d%d",&n,&m)!=EOF){
Init(a,,n,); //初始化 for(i=;i<=n;i++){ //输入
int t;
scanf("%d",&t);
Update(a,i,i,,t);
} for(i=;i<=m;i++){ //m次查询
scanf("%*"); //读掉空格
scanf("%c%d%d",&c,&A,&B);
switch(c){
case 'Q':
printf("%d\n",Query(a,A,B,));
break;
case 'U':
Update(a,A,A,,B);
break;
default:break;
}
}
}
return ;
}
Freecode : www.cnblogs.com/yym2013
hdu 1754:I Hate It(线段树,入门题,RMQ问题)的更多相关文章
- hdu 1754 I Hate It 线段树基础题
Problem Description 很多学校流行一种比较的习惯.老师们很喜欢询问,从某某到某某当中,分数最高的是多少. 这让很多学生很反感. 不管你喜不喜欢,现在需要你做的是,就是按照老师的要求, ...
- hdu 1754 I Hate It(线段树水题)
>>点击进入原题测试<< 思路:线段树水题,可以手敲 #include<string> #include<iostream> #include<a ...
- hdu 1166敌兵布阵(线段树入门题)
>>点击进入原题测试<< 思路:这两天在学线段树,这个题直接手敲一下线段树就行了,都没有用上懒人标记.入门题 cin,cout会超时,记得加std::ios::sync_wit ...
- HDU 1754 I Hate It(线段树模板题)
题目链接: 传送门 I Hate It Time Limit: 3000MS Memory Limit: 32768 K Description 很多学校流行一种比较的习惯.老师们很喜欢询问, ...
- hdu 1754 I Hate It 线段树 点改动
// hdu 1754 I Hate It 线段树 点改动 // // 不多说,裸的点改动 // // 继续练 #include <algorithm> #include <bits ...
- HDU 1754 I Hate It 线段树单点更新求最大值
题目链接 线段树入门题,线段树单点更新求最大值问题. #include <iostream> #include <cstdio> #include <cmath> ...
- HDU 1754 I Hate It(线段树之单点更新,区间最值)
I Hate It Time Limit: 9000/3000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total ...
- HDU 1754 I Hate It 线段树RMQ
I Hate It Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=175 ...
- HDU 1754 I Hate It(线段树单点替换+区间最值)
I Hate It [题目链接]I Hate It [题目类型]线段树单点替换+区间最值 &题意: 本题目包含多组测试,请处理到文件结束. 在每个测试的第一行,有两个正整数 N 和 M ( 0 ...
- HDU 1754 I Hate It (线段树)
题意:略. 析:裸的线段树. 代码如下: #pragma comment(linker, "/STACK:1024000000,1024000000") #include < ...
随机推荐
- Java获取新浪微博cookies
import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.F ...
- Fibonacci 1
Fibonacci 1 题面 \[F_0=0,F_1=1,F_n=F_{n-1}+F_{n-2}\] 给定\(n\),求 \[S(n)=\sum_{i=1}^{n}F_nF_{n-1}\] 数据格式 ...
- oracle数据库备份
--数据库备份--导出 exp userid=shoppingsys/shoppingsys@orcl file=/home/oracle/shoppingsys.dmp log=/home/orac ...
- [20160704]Addition program that use JOptionPane for input and output
//Addition program that use JOptionPane for input and output. import javax.swing.JOptionPane; public ...
- Redis Sentinel高可用架构
Redis目前高可用的架构非常多,比如keepalived+redis,redis cluster,twemproxy,codis,这些架构各有优劣,今天暂且不说这些架构,今天主要说说redis se ...
- vps mysql自动关闭
买了个阿里云的vps 装了一个wordpress,mysql一直自动关闭,百思不得其解,只有搜索 最后才发现是因为服务器内存太小,毕竟是最便宜的才512m ---------------------- ...
- .NET中的CTS、CLS和CLR
在学习.NET的过程中,都会不可避免地接触到这三个概念,那么这三个东西是什么以及它们之间的关系是怎样的呢?我们在学习的过程中可能比较过多的会去关注CLR,因为CLR是.NET Framework的核心 ...
- codeforces 492C. Vanya and Exams 解题报告
题目链接:http://codeforces.com/problemset/problem/492/C 题目意思:给出 3 个整数:n, r, avg.然后有 n 行,每行有两个数:第 i 行有 ...
- SprignMVC+myBatis整合
转载自:http://lydia-fly.iteye.com/blog/2153076 学习本节内容请先看"MyBatis的基本应用".地址:http://lydia-fly.it ...
- android ExpandableListView详解
ExpandableListView是android中可以实现下拉list的一个控件,是一个垂直滚动的心事两个级别列表项手风琴试图,列表项是来自ExpandableListViewaAdapter,组 ...