码迷,mamicode.com
首页 > 其他好文 > 详细

可持久化线段树(主席树)模板

时间:2017-05-23 13:07:37      阅读:140      评论:0      收藏:0      [点我收藏+]

标签:turn   可持久化线段树   std   insert   include   namespace   cst   color   code   

比赛时候写的,这里整理到这里

 

#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
const int maxn = 2e5 + 500;
struct Node{
    Node *l, *r;
    int v;
    void maintain(){
        v = l->v + r->v;
    }
}pool[maxn*16], *root[maxn], *null;
int tot = 0;
Node *newnode(){
    Node* temp = &pool[tot++];
    temp->l = temp->r = null; temp->v = 0;
    return temp;
}
void init(){
    null = new Node();
    null->l = null->r = null;
    null->v = 0;
}
void Insert(Node *&o, Node *o2, int l, int r, int k, int v){
    if(o == null) o = newnode();
    if(l == r) { o->v += v + o2->v; return; }
    int mid = (l+r)/2;
    if(k <= mid) {
        Insert(o->l, o2->l, l, mid, k, v);
        o->r = o2->r;
    } else {
        Insert(o->r, o2->r, mid+1, r, k, v);
        o->l = o2->l;
    }
    o->maintain();
}
int Query(Node *o, int l, int r, int L, int R){
    if(o == null) return 0;
    if(L <= l && r <= R) return o->v;
    int mid = (l+r)/2, ans = 0;
    if(L <= mid) ans += Query(o->l, l, mid, L, R);
    if(R > mid) ans += Query(o->r, mid+1, r, L, R);
    return ans;
}

int main(){
    return 0;
}

 

可持久化线段树(主席树)模板

标签:turn   可持久化线段树   std   insert   include   namespace   cst   color   code   

原文地址:http://www.cnblogs.com/Saurus/p/6893487.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!