树链剖分
操作有点多的裸树剖。套路下放边权后就是打板子。注意操作的时候不要包括LCA。
代码:
#include<cctype>
#include<cstdio>
#include<cstring>
#include<algorithm>
#define N 20005
#define F inline
using namespace std;
struct edge{ int nxt,to,d; }ed[N<<1];
struct tree{ int l,r,s,mx,mn,f; }t[N<<2];
int n,k,ti,a[N],w[N],h[N],tp[N],sz[N],to[N],fa[N],id[N],in[N],dep[N];
F char readc(){
static char buf[100000],*l=buf,*r=buf;
if (l==r) r=(l=buf)+fread(buf,1,100000,stdin);
return l==r?EOF:*l++;
}
F int _read(){
int x=0,f=1; char ch=readc(),c;
while (!isdigit(ch)&&!isupper(ch)){ if (ch=='-') f=-1; ch=readc(); }
if (isupper(ch))
if (ch=='C'||ch==