可持久化线段树(主席树)模板
Posted Saurus
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了可持久化线段树(主席树)模板相关的知识,希望对你有一定的参考价值。
比赛时候写的,这里整理到这里
#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; }
以上是关于可持久化线段树(主席树)模板的主要内容,如果未能解决你的问题,请参考以下文章