题目: 题目背景 SDOI2011 DAY1 T3 题目描述 给定一棵有 n 个节点的无根树和 m 个操作,操作有 2 类:1.将节点 a 到节点 b 路径上所有点都染成颜色 c :2.询问节点 a 到节点 b 路径上的颜色段数量(连续相同颜色被认为是同一段),如“112221”由 3 段组:“11”.“222”和“1”.请你写一个程序依次完成这 m 个操作. 输入格式 第一行包含 2 个整数 n 和 m ,分别表示节点数和操作数:第二行包含 n 个正整数表示 n 个节点的初始颜色:下面 n-1…
题目链接 BZOJ2243 树链剖分 $+$ 线段树 线段树每个节点维护$lc$, $rc$, $s$ $lc$代表该区间的最左端的颜色,$rc$代表该区间的最右端的颜色 $s$代表该区间的所有连续颜色段数(仅考虑该区间) $lazy$表示延迟信息. #include <bits/stdc++.h> using namespace std; #define rep(i, a, b) for (int i(a); i <= (b); ++i) #define dec(i, a, b) fo…
[传送门] 树链剖分就行了,注意线段树上颜色的合并 Code #include <cstdio> #include <algorithm> #define N 100010 #define MID int mid=(l+r)>>1,ls=id<<1,rs=id<<1|1 #define len (r-l+1) using namespace std; struct tree{ int lc,rc,sum,tag; tree(){lc=rc=tag…