• 线段树(递归)模板



     1 namespace Seg{
     2     struct segnode{
     3         int S,E,len,mid;
     4         int Min, Tag;
     5         segnode *L,*R;
     6         segnode(int l,int r,int *base):S(l),E(r),len(r-l),mid(l+(len>>1)){
     7             Tag = 0;
     8             if(len == 1){Min = base[l],L = R = NULL;return;}
     9             L = new segnode(l,mid,base);
    10             R = new segnode(mid,r,base);
    11             Min = min(L->Min,R->Min);
    12         }
    13         ~segnode(){if(L!=NULL)delete L,delete R;}
    14         int GetMin(int l,int r){
    15             if(l==S && r==E)return Tag + Min;
    16             if(l >= mid)return Tag + R->GetMin(l,r);
    17             if(r <= mid)return Tag + L->GetMin(l,r);
    18             return Tag + min(L->GetMin(l,mid),R->GetMin(mid,r));
    19         }
    20         void Update(int loc, int val){
    21             if(len == 1){
    22                 Min = val;
    23                 return;
    24             }
    25             if(loc < mid)L -> Update(loc, val);
    26             else R -> Update(loc, val);
    27             Min = min(L->Tag+L->Min,R->Tag+R->Min);
    28         }
    29         void AddRng(int l,int r,int k){
    30             if(l==S && r==E){Tag += k;return;}
    31             if(l >= mid)R->AddRng(l,r,k);
    32             else if(r <= mid)L->AddRng(l,r,k);
    33             else L->AddRng(l,mid,k),R->AddRng(mid,r,k);
    34             Min = min(L->Tag+L->Min,R->Tag+R->Min);
    35         }
    36     };
    37     struct segtree {
    38         segnode *Root;
    39         segtree(int *l,int *r){Root = new segnode(0,r-l,l);}
    40         ~segtree(){delete Root;}
    41         int GetMin(int l,int r){return Root->GetMin(l,r);}
    42         void AddRng(int l,int r,int k){Root->AddRng(l,r,k);}
    43     };
    44 }
  • 相关阅读:
    基于Html5的移动应用开发经验总结:第一篇架构选型篇(下)
    401 Palindromes 解题报告
    uva 537 Artificial Intelligence?
    根据所给的年月,打印该月份的日历表
    八皇后问题
    uva10815 Andy's First Dictionary
    憋了我半天,写个博客发泄一下
    uva 457
    uva 10010 Where's Waldorf?
    uva424 Integer Inquiry
  • 原文地址:https://www.cnblogs.com/Asm-Definer/p/4005453.html
Copyright © 2020-2023  润新知