【Luogu_P4556】 [Vani有约会]雨天的尾巴 /【模板】线段树合并

题目描述:

在这里插入图片描述

思路:

合并线段树
这里讲思路
首先它说要更改x到y的路径,我们不难想到树上差分,在x,y位置+1,在lca,fa(lca)位置-1,最后从下往上合并就行了
我们对每个点开一个权值线段树,记录救济粮,合并简单来说就是儿子对儿子,没儿子就抢过来。

c o d e code code

#include<iostream>
#include<cstdio>
#include<algorithm>

using namespace std;

const int MAXN = 1e5 + 5;

int n, q, rex[MAXN], rey[MAXN], rez[MAXN], root[MAXN], cnt;

int L[MAXN], H[MAXN];

int head[MAXN], tot=1, f[MAXN][25], dep[MAXN];

struct node {
   
	int to, next;
} edge[MAXN * 2];
struct SgT {
   
	int l, r, maxx, ans;
	#define l(p) tree[p].l
	#define r(p) tree[p].r
	#define maxn(p) tree[p].maxx
	#define ans(p) tree[p].ans
}tree[MAXN * 100];

void add(int x, int y) {
   
	edge[++tot] = (node){
   y, head[x]};
	head[x] = tot;
}

void dfs(int x, int fa) {
   
	dep[x] = dep[fa] + 1, f[x][0] = fa;
	
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值