一、题目
二、解法
原版在这里,文艺平衡树
这里遇到了一个问题,可持久化怎样下传标记,考虑到多个节点可能共用儿子,我们就不能贸然下传标记,应该暴力新建儿子节点,下传给新建的节点,所以综合文艺平衡树和可持久化平衡树这题就不难写了,改一下 push_down \text{push\_down} push_down,注意要开 long long \text{long long} long long。
#include <cstdio>
#include <cstdlib>
#include <iostream>
#include <ctime>
#define int long long
using namespace std;
const int MAXN = 200005;
const int MAXM = 100*MAXN;
int read()
{
int x=0,flag=1;char c;
while((c=getchar())<'0' || c>'9') if(c=='-') flag=-1;
while(c>='0' && c<='9') x=(x<<3)+(x<<1)+(c^48),c=getchar();
return x*flag;
}
int n,cnt,last,rt[MAXN];
int ch[MAXM][2],siz[MAXM],val[MAXM],sum[MAXM],hp[MAXM],fl[MAXM];
struct node
{
int p[2];
node() {
p[0]=p[1]=0;}
}emp;
void copy(int a