zoukankan      html  css  js  c++  java
  • HDU 1754线段树

    第一个自己动手写的线段树,1Y还是有点小激动哈(虽然是模版题)

     1 #include<cstdio>
     2 #include<cstring>
     3 #include<algorithm>
     4 using namespace std;
     5 const int SIZE=200005;
     6 const int INF=1000000;
     7 int maxv[SIZE<<2];
     8 int num[SIZE];
     9 void build(int l,int r,int rt)
    10 {
    11     if(l==r){
    12         maxv[rt]=num[l];
    13         return ;
    14     }
    15     int mid=(l+r)>>1;
    16     build(l,mid,rt<<1);
    17     build(mid+1,r,rt<<1|1);
    18     maxv[rt]=max(maxv[rt<<1],maxv[rt<<1|1]);
    19 }
    20 int findmax(int L,int R,int l,int r,int rt)
    21 {
    22     if(L<=l&&R>=r) return maxv[rt];
    23     int mid=(l+r)>>1;
    24     int ret=-INF;
    25     if(L<=mid) ret=max(ret,findmax(L,R,l,mid,rt<<1));
    26     if(R>mid) ret=max(ret,findmax(L,R,mid+1,r,rt<<1|1));
    27     return ret;
    28 }
    29 void update(int l,int r,int rt,int v,int p)
    30 {
    31     int mid=(l+r)>>1;
    32     if(l==r) maxv[rt]=p;
    33     else{
    34         if(v<=mid) update(l,mid,rt<<1,v,p);
    35          else update(mid+1,r,rt<<1|1,v,p);
    36         maxv[rt]=max(maxv[rt<<1],maxv[rt<<1|1]);
    37     }
    38 }
    39 int main()
    40 {
    41     //freopen("data.in","r",stdin);
    42     int m,n;
    43     int i,j;
    44     while(scanf("%d%d",&n,&m)!=EOF)
    45     {
    46         for(i=1;i<=n;i++)
    47             scanf("%d",&num[i]);
    48         build(1,n,1);
    49         for(i=1;i<=m;i++)
    50         {
    51             int a,b;
    52             char c;
    53             getchar();
    54             scanf("%c %d %d",&c,&a,&b);
    55             if(c=='Q')
    56                 printf("%d
    ",findmax(a,b,1,n,1));
    57             else if(c=='U')
    58                 update(1,n,1,a,b);
    59         }
    60     }
    61     return 0;
    62 }

    虽然自己理解线段树也不深刻,只是掌握了一点皮毛而已,但是觉得线段树的理解在于它是一颗完全二叉树因此可以以数组的形式表示出来。再加上只要理解好线段树的区间覆盖的问题我想基本的题还是能写了

  • 相关阅读:
    python使用ORM之如何调用多对多关系
    ORM
    初学者用pycharm创建一个django项目和一个app时需要注意的事项
    CSRF verification failed. Request aborted.
    函数三生成器
    函数二函数进阶二
    函数二函数进阶
    函数一函数初识
    文件操作初识
    类型与运算五
  • 原文地址:https://www.cnblogs.com/acalvin/p/3588689.html
Copyright © 2011-2022 走看看