#4573. [ZJOI2016] 大森林

[ZJOI2016] 大森林

题目描述

小 Y 家里有一个大森林,里面有 nn 棵树,编号从 11nn
一开始这些树都只是树苗,只有一个节点,标号为 11
这些树都有一个特殊的节点,我们称之为生长节点,这些节点有生长出子节点的能力。

小 Y 掌握了一种魔法,能让第 ll 棵树到第 rr 棵树的生长节点长出一个子节点。同时她还能修改第l棵树到第r棵树的生长节点。

她告诉了你她使用魔法的记录,你能不能管理她家的森林,并且回答她的询问呢?

输入格式

第一行包含 22 个正整数 n,mn,m,共有 nn 棵树和 mm 个操作。接下来 mm 行,每行包含若干非负整数表示一个操作,操作格式为:

  • 0 l r 表示将第 ll 棵树到第 rr 棵树的生长节点下面长出一个子节点,子节点的标号为上一个 00 号操作叶子标号加 11(例如,第一个 00 号操作产生的子节点标号为 22),llrr 之间的树长出的节点标号都相同。保证 1lrn1 \leq l \leq r \leq n
  • 1 l r x 表示将第 ll 棵树到第 rr 棵树的生长节点改到标号为 xx 的节点。对于 i (lir)i\ (l \leq i \leq r) 这棵树,如果标号 xx 的点不在其中,那么这个操作对该树不产生影响。保证 1lrn1 \leq l \leq r \leq nxx 不超过当前所有树中节点最大的标号。
  • 2 x u v 询问第 xx 棵树中节点 uu 到节点 vv 点的距离,也就是在第 xx 棵树中从节点 uu 和节点 vv 的最短路上边的数量。保证 1xn1 \leq x \leq n,这棵树中节点 uu 和节点 vv 存在。

输出格式

输出包括若干行,按顺序对于每个小 Y 的询问输出答案

5 5
0 1 5
1 2 4 2
0 1 4
2 1 1 3
2 2 1 3
1
2

数据规模与约定

对于 100%100\% 的数据,1n1051 \leq n \leq 10^51m2×1051 \leq m \leq 2 \times 10^5