• 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 }

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

  • 相关阅读:
    mongoDB--1 概念
    PythonWeb-Django框架学习-Demo2-创建你的小WEB应用
    PythonWeb-Django框架学习-Demo1-快速搭建项目
    Python--Demo18--异步IO之协程
    Python--Demo17--WEB应用程序之模板和MVC
    Python--Demo16--WEB应用程序之框架的好处
    Python--Demo15--WEB应用程序WGSI接口
    快速了解HTTP协议
    Python--Demo14--正则表达式
    Python--Demo13--高级特性匿名函数、推导式、迭代器、生成器
  • 原文地址:https://www.cnblogs.com/acalvin/p/3588689.html
Copyright © 2020-2023  润新知