• 线段树 建树、查询、单点更新


     1 #include<stdio.h>
     2 int n, m;
     3 int a[10];
     4 int tree[6<<2];
     5 
     6 int minx(int a, int b)
     7 {
     8     return a<b?a:b;
     9 }
    10 
    11 void build(int rt, int l, int r)
    12 {
    13     if(l==r)
    14     {
    15         tree[rt]=a[l];
    16     }
    17     else
    18     {
    19         int m=(l+r)>>1;
    20         build(rt<<1, l, m);
    21         build((rt<<1)+1, m+1, r);
    22 
    23         tree[rt]=minx(tree[rt<<1], tree[(rt<<1)+1]);
    24     }
    25 }
    26 
    27 int query(int rt, int l, int r, int a, int b)
    28 {
    29     if(a<=l && b>=r)
    30         return tree[rt];
    31     if(a>r || b<l)
    32         return -1;
    33     int m=(l+r)>>1;
    34     int x=query(rt<<1, l, m, a, b);
    35     int y=query((rt<<1)+1, m+1, r, a, b);
    36     if(x==-1)
    37         return y;
    38     if(y==-1)
    39         return x;
    40     if(x<=y)
    41         return x;
    42     return y;
    43 } 
    44 
    45 void updata(int rt, int l, int r, int a, int b)
    46 {
    47     if(l==r)
    48     {
    49         tree[rt]=b;
    50     }
    51     else
    52     {
    53         int m=(l+r)>>1;
    54         if(a<=m)
    55             updata(rt<<1, l, m, a, b);
    56         else
    57             updata((rt<<1)+1, m+1, r, a, b);
    58         tree[rt]=minx(tree[rt<<1], tree[(rt<<1)+1]);
    59     }
    60 }
    61 
    62 int main()
    63 {
    64     while(scanf("%d%d", &n, &m)==2)
    65     {
    66         for(int i=1; i<=n; i++)
    67             scanf("%d", &a[i]);
    68         build(1, 1, n);
    69 
    70         for(int j=0; j<m; j++)
    71         {
    72             char x;
    73             int a, b;
    74             getchar();
    75             scanf("%c%d%d", &x, &a, &b);
    76             if(x=='Q')
    77                 printf("%d
    ", query(1, 1, n, a, b));
    78             else
    79                 updata(1, 1, n, a, b);
    80         }
    81     }
    82     return 0;
    83 }



    http://blog.csdn.net/metalseed/article/details/8039326#


  • 相关阅读:
    Jquery揭秘系列:实现$.fn.extend 和$.extend函数
    小谈Jquery框架
    js实现可拖动Div
    WebApp 九宫格抽奖简易demo
    原生js实现autocomplete插件
    扩展RadioButtonListFor和CheckBoxListFor
    关于js的回调函数的一点看法
    原生js实现fadein 和 fadeout
    QlikView sheet权限
    asp.net MVC 文件流导出Excel
  • 原文地址:https://www.cnblogs.com/qyy-goodluck/p/4352962.html
Copyright © 2020-2023  润新知