码迷,mamicode.com
首页 > 其他好文 > 详细

I Hate It HDU - 1754

时间:2018-03-04 22:12:42      阅读:151      评论:0      收藏:0      [点我收藏+]

标签:efi   线段树   function   gpo   老师   fine   def   有一个   hat   

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

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

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

Hint

Huge input,the C function scanf() will work better than cin
        
 这题就略微的修改一下 线段树结构  入门级题目 水题
 1 #include<iostream>
 2 #include<stdio.h>
 3 #include<cstring>
 4 #include<algorithm>
 5 using namespace std;
 6 #define maxn 200010
 7 int  sum[maxn*4+10];
 8 void pushup(int rt)
 9 {
10     sum[rt]=max(sum[rt<<1],sum[rt<<1|1]);
11 }
12 void build(int l,int r,int rt)
13 {
14     if (l==r){
15         scanf("%d",&sum[rt]);
16         return ;
17     }
18     int m=(l+r)>>1;
19     build(l,m,rt<<1);
20     build(m+1,r,rt<<1|1);
21     pushup(rt);
22 }
23 void updata(int c,int x,int l,int r,int rt)
24 {
25     if (l==r) {
26         sum[rt]=c;
27         return ;
28     }
29     int m=(l+r)>>1;
30     if (x<=m) updata(c,x,l,m,rt<<1);
31     if (x>m)  updata(c,x,m+1,r,rt<<1|1);
32     pushup(rt);
33 }
34 int maxs(int x,int y,int l,int r,int rt)
35 {
36     int ans=0;
37     if (x<=l && r<=y ) return sum[rt];
38     int m=(l+r)>>1;
39     if (x<=m) ans=max(ans,maxs(x,y,l,m,rt<<1));
40     if (y>m)  ans=max(ans,maxs(x,y,m+1,r,rt<<1|1));
41     return ans;
42 }
43 
44 int main()
45 {
46     int n,m;
47     while(scanf("%d%d",&n,&m)!=EOF){
48         build(1,n,1);
49         char b[2];
50         int x,y;
51         while(m--){
52             scanf("%s%d%d",b,&x,&y);
53             if (b[0]==Q) printf("%d\n",maxs(x,y,1,n,1));
54             else updata(y,x,1,n,1);
55         }
56     }
57     return 0;
58 }

 



I Hate It HDU - 1754

标签:efi   线段树   function   gpo   老师   fine   def   有一个   hat   

原文地址:https://www.cnblogs.com/qldabiaoge/p/8506394.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!