I Hate It HDU
来源:互联网 发布:淘宝废铁战士的时光机 编辑:程序博客网 时间:2024/05/18 00:59
I Hate It
很多学校流行一种比较的习惯。老师们很喜欢询问,从某某到某某当中,分数最高的是多少。
这让很多学生很反感。
不管你喜不喜欢,现在需要你做的是,就是按照老师的要求,写一个程序,模拟老师的询问。当然,老师有时候需要更新某位同学的成绩。
这让很多学生很反感。
不管你喜不喜欢,现在需要你做的是,就是按照老师的要求,写一个程序,模拟老师的询问。当然,老师有时候需要更新某位同学的成绩。
在每个测试的第一行,有两个正整数 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。
5 61 2 3 4 5Q 1 5U 3 6Q 3 4Q 4 5U 2 9Q 1 5
5659
题目大意:求一个区间的最大值,线段树的模板题
题目分析:代码上的有注释,没啥好说的。
AC Code
#include<cstdio>#include<iostream>#include<cstring>#include<stdlib.h>#include<algorithm>///min和max函数的头文件using namespace std;const int N=2e5+100;int n,m;int arr[N];struct SegTreeNode{ int val;}segTree[4*N];///线段树中需要的点比N多很多,四倍应该够用了吧void pushUp(int root){ segTree[root].val=max(segTree[root*2].val,segTree[root*2+1].val);}void build(int root,int arr[],int istart,int iend){ if(istart==iend) { segTree[root].val=arr[istart]; } else { int mid=(istart+iend)/2; build(root*2,arr,istart,mid); build(root*2+1,arr,mid+1,iend); pushUp(root); }}void updateOne(int root,int nstart,int nend,int index,int addVal){ if(nstart==nend) { if(nstart==index) segTree[root].val=addVal; return ; } int mid=(nstart+nend)/2; if(index<=mid) updateOne(root*2,nstart,mid,index,addVal); else updateOne(root*2+1,mid+1,nend,index,addVal); pushUp(root);}int query(int root,int nstart,int nend,int qstart,int qend){ if(qstart>nend||qend<nstart) return -1; if(qstart<=nstart&&qend>=nend) return segTree[root].val; int mid=(nstart+nend)/2; return max(query(root*2,nstart,mid,qstart,qend), query(root*2+1,mid+1,nend,qstart,qend));}int main(){ while(scanf("%d%d",&n,&m)!=EOF) { for(int i=1;i<=n;i++) scanf("%d",&arr[i]); getchar();///getchar()接收回车键 build(1,arr,1,n); char ch; int a,b; for(int i=1;i<=m;i++) { scanf("%c",&ch); scanf("%d%d",&a,&b);///输入完a,b后要按回车键,用getchar()接收 getchar(); if(ch=='U') { updateOne(1,1,n,a,b); } else { printf("%d\n",query(1,1,n,a,b)); /// "\n"执行换行的功能 } } } return 0;}///在用scanf("%c",...)读入一个字符时,要特别注意它接收的是什么
阅读全文
0 0
- HDU I Hate It
- I Hate It HDU
- I Hate It HDU
- I Hate It (HDU
- I Hate It HDU
- I hate it.hdu
- I Hate It HDU
- I Hate It HDU
- I Hate It HDU
- hdu 1754 I Hate It
- HDU 1754 I Hate It
- hdu 1754 I Hate It
- HDU 1754 I Hate It
- hdu 1754 I Hate It
- HDU 1754 I Hate It .
- HDU 1754 i hate it
- hdu 1754 I Hate It
- hdu 1754 I Hate It
- 超市小票
- 【设计模式】中介者模式
- JDK8中JVM堆内存划分
- ajax的时间格式化
- Android 放大星星又可以缩小的星星
- I Hate It HDU
- 有点饱#11
- POJ 3252 Round Numbers (组合数学+数位dp)
- [SpringMVC] HttpMessageConverter配置
- awk命令
- hashmap
- Java复习笔记——Comparable 和 Comparator接口 引用类型比较
- 设计模式学习笔记十:单例模式(Singleton Pattern)
- Borg Maze--(prime+BFS)