zoukankan      html  css  js  c++  java
  • hdu1754 I Hate It 线段树

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

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

    线段树裸题,单点修改,区间求最大值。

     1 #include<stdio.h>
     2 const int maxm=200005;
     3 
     4 int a[maxm],st[maxm<<2];
     5 char s[10];
     6 
     7 int max(int a,int b){
     8     return a>b?a:b;
     9 }
    10 
    11 void build(int o,int l,int r){
    12     if(l==r){
    13         st[o]=a[l];
    14         return;
    15     }
    16     int m=l+((r-l)>>1);
    17     build(o<<1,l,m);
    18     build(o<<1|1,m+1,r);
    19     st[o]=max(st[o<<1],st[o<<1|1]);
    20 }
    21 
    22 void update(int o,int l,int r,int x,int c){
    23     if(l==r){
    24         st[o]=c;
    25         return;
    26     }
    27     int m=l+((r-l)>>1);
    28     if(x<=m)update(o<<1,l,m,x,c);
    29     if(x>=m+1)update(o<<1|1,m+1,r,x,c);
    30     st[o]=max(st[o<<1],st[o<<1|1]);
    31 }
    32 
    33 int query(int o,int l,int r,int ql,int qr){
    34     if(ql<=l&&qr>=r)return st[o];
    35     int m=l+((r-l)>>1);
    36     int maxx=-0x3f3f3f3f;
    37     if(ql<=m)maxx=max(maxx,query(o<<1,l,m,ql,qr));
    38     if(qr>=m+1)maxx=max(maxx,query(o<<1|1,m+1,r,ql,qr));
    39     return maxx;
    40 }
    41 
    42 int read(){
    43     int x=0,d=1;
    44     char c=getchar();
    45     while((c>'9'||c<'0')&&c!='-')c=getchar();
    46     if(c=='-'){
    47         d=-1;
    48         c=getchar();
    49     }
    50     while(c>='0'&&c<='9'){
    51         x=x*10+c-'0';
    52         c=getchar();
    53     }
    54     return d*x;
    55 }
    56 
    57 int main(){
    58     int n,m;
    59     while(scanf("%d%d",&n,&m)!=EOF){
    60         int i;
    61         for(i=1;i<=n;i++)a[i]=read();
    62         build(1,1,n);
    63         for(i=1;i<=m;i++){
    64             scanf("%s",s);
    65             if(s[0]=='Q'){
    66                 int ql=read();
    67                 int qr=read();
    68                 printf("%d
    ",query(1,1,n,ql,qr));
    69             }
    70             else if(s[0]=='U'){
    71                 int x=read();
    72                 int c=read();
    73                 update(1,1,n,x,c);
    74             }
    75         }
    76     }
    77     return 0;
    78 }
    View Code
  • 相关阅读:
    Java多线程模式(二)
    HDU 1232 畅通工程
    跨平台实现wchar_t转成char
    小学生玩ACM----优先队列
    JSTL标签急速秒杀jsp页面中的java代码(一)---Core标签库
    项目沟通技术和技巧
    自己写一个strcmp函数(C++)
    Linux Makefile文件编写详细步骤与实践
    JAVA之数组查询binarySearch()方法详解
    系统调用与标准库调用的区别
  • 原文地址:https://www.cnblogs.com/cenariusxz/p/6592297.html
Copyright © 2011-2022 走看看