传统题 1000ms 256MiB

[愚人节 2025 J] 树链剖分

You cannot submit for this problem because the contest is ended. You can click "Open in Problem Set" to view this problem in normal mode.

你的代码长度应该等于 0\textbf 0。

本题有 Special Judge,它会忽略所有的换行符(ASCII 码为 10\bm{10})和回车符(ASCII 码为 13\bm{13})。

Descriptions

如题,已知一棵包含 NN 个结点的树(连通且无环),每个节点上包含一个数值,需要支持以下操作:

  • 1 x y z,表示将树从 xx 到 yy 结点最短路径上所有节点的值都加上 zz。

  • 2 x y,表示求树从 xx 到 yy 结点最短路径上所有节点的值之和。

  • 3 x z,表示将以 xx 为根节点的子树内所有节点值都加上 zz。

  • 4 x 表示求以 xx 为根节点的子树内所有节点值之和

Format

Input

第一行包含 44 个正整数 N,M,R,PN,M,R,P,分别表示树的结点个数、操作个数、根节点序号和取模数(即所有的输出结果均对此取模)。

接下来一行包含 NN 个非负整数,分别依次表示各个节点上初始的数值。

接下来 N−1N-1 行每行包含两个整数 x,yx,y,表示点 xx 和点 yy 之间连有一条边(保证无环且连通)。

接下来 MM 行每行包含若干个正整数,每行表示一个操作。

Output

输出包含若干行,分别依次表示每个操作 22 或操作 44 所得的结果(对 PP 取模)。

Examples

5 5 2 24
7 3 7 8 0 
1 2
1 5
3 1
4 1
3 4 2
3 2 2
4 5
1 5 1 3
2 1 3
2
21

Limitations

对于 30%30\% 的数据: 1≤N≤101 \leq N \leq 10,1≤M≤101 \leq M \leq 10;

对于 70%70\% 的数据: 1≤N≤1031 \leq N \leq {10}^3,1≤M≤1031 \leq M \leq {10}^3;

对于 100%100\% 的数据: 1≤N≤1051\le N \leq {10}^5,1≤M≤1051\le M \leq {10}^5,1≤R≤N1\le R\le N,1≤P≤2301\le P \le 2^{30}。所有输入的数均在 int 范围内。

本题有 Special Judge,它会忽略所有的换行符(ASCII 码为 10\bm{10})和回车符(ASCII 码为 13\bm{13})。

Explanations

树的结构如下:

各个操作如下:

故输出应依次为 22 和 2121。

Code

#include<bits/stdc++.h>
#define N 2000005
#define ll long long
using namespace std;

int n,lst[N][35],f[N],h[N];
ll ans;
string s;

int main()
{
	cin>>n>>s;
	s=' '+s;
	for(int i=1;i<=n;i++)
	{
		h[i]=i;
		int j=lst[h[i-1]][s[i]-97];
		if(j) h[i]=h[j-1],f[i]=f[j-1]+1;
		lst[h[i]][s[i]-97]=i;
		ans+=f[i];
	}
	cout<<ans;
	return 0;
}

[CZR-(-001)] CZOJ 2025 愚人节比赛

未参加
状态
已结束
规则
ACM/ICPC
题目
13
开始于
2025-3-12 14:00
结束于
2025-4-6 14:00
持续时间
600 小时
主持人
参赛人数
110