提高⏱ 1000ms💾 256MB#P8008

题目描述

给定长度为 $n$ 的序列(数据随机生成),支持两种操作共 $q$ 次:操作一,把区间 $[l,r]$ 内所有数赋值为 $v$;操作二,查询区间 $[l,r]$ 的和。请使用 ODT(珂朵莉树)等适合随机数据的结构。

输入格式

第一行两个整数 $n,q$;第二行 $n$ 个整数;接下来 $q$ 行,每行为 1 l r v2 l r

输出格式

对每个操作二输出一行一个整数。

数据范围

$$1 \le n,q \le 10^6,\ 0 \le a_i,v \le 10^9$$

样例输入 #1
5 5
3 1 4 1 5
2 2 4
1 1 5 7
2 1 5
1 3 3 0
2 3 3
样例输出 #1
6
35
0
样例输入 #2
6 4
9 9 9 1 1 9
1 1 6 2
2 1 6
2 4 5
1 2 3 5
样例输出 #2
12
4