首页 > 代码库 > 可持久化线段树(主席树)模板
可持久化线段树(主席树)模板
比赛时候写的,这里整理到这里
#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; }
可持久化线段树(主席树)模板
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。