zoukankan      html  css  js  c++  java
  • HDU 1754 I Hate It(线段树单点更新求区间最值)

    http://acm.hdu.edu.cn/showproblem.php?pid=1754

    题意

    中文题面不解释

    思路

    就是一个单点更新求区间最值的裸题,给新手入门线段树比较好,有什么问题留言吧。

     1 #define IO std::ios::sync_with_stdio(0);
     2 #include <bits/stdc++.h>
     3 #define iter ::iterator
     4 using namespace  std;
     5 typedef long long ll;
     6 typedef pair<ll,ll>P;
     7 #define pb push_back
     8 #define se second
     9 #define fi first
    10 #define rs o*2+1
    11 #define ls o*2
    12 const int N=2e5+5;
    13 int n,m;
    14 int maxv[N*4];
    15 void build(int o,int l,int r){
    16     if(l==r){
    17         scanf("%d",&maxv[o]);
    18         return;
    19     }
    20     int m=(l+r)/2;
    21     build(ls,l,m);
    22     build(rs,m+1,r);
    23     maxv[o]=max(maxv[ls],maxv[rs]);
    24 }
    25 void up(int o,int l,int r,int p,int v){
    26     if(l==r&&l==p){
    27         maxv[o]=v;
    28         return;
    29     }
    30     int m=(l+r)/2;
    31     if(p<=m)up(ls,l,m,p,v);
    32     else up(rs,m+1,r,p,v);
    33     maxv[o]=max(maxv[ls],maxv[rs]);
    34 }
    35 int query(int o,int l,int r,int ql,int qr){
    36     if(l>=ql&&r<=qr){
    37         return maxv[o];
    38     }
    39     int m=(l+r)/2;
    40     int res=0;
    41     if(ql<=m)res=max(res,query(ls,l,m,ql,qr));
    42     if(qr>m)res=max(res,query(rs,m+1,r,ql,qr));
    43     return res;
    44 }
    45 int main(){
    46     while(~scanf("%d%d",&n,&m)){
    47         build(1,1,n);
    48         while(m--){
    49             char s[10];
    50             int x,y;
    51             scanf("%s",s);
    52             if(s[0]=='Q'){
    53                 scanf("%d%d",&x,&y);
    54                 if(x>y)swap(x,y);
    55                 printf("%d
    ",query(1,1,n,x,y));
    56             }
    57             else{
    58                 scanf("%d%d",&x,&y);
    59                 up(1,1,n,x,y);
    60             }
    61         }
    62     }
    63 }
  • 相关阅读:
    vim 常用命令
    centos 安装mysql
    centos部署ftp
    centos 6.8部署nginx
    ndk学习16: unix domain socket
    ndk学习14: 进程
    ndk学习13: proc
    ndk学习11: linux内存管理
    ndk学习10: linux文件系统
    ndk学习9: 动态使用共享库
  • 原文地址:https://www.cnblogs.com/ccsu-kid/p/10606105.html
Copyright © 2011-2022 走看看