bzoj#P3005. 体育课

体育课

题目描述

又是一节体育课的时间了,有 n n 个同学排成了一排。他们都很讨厌排在第一个位置的同学,于是后面的同学中比第一个高的都会产生一个高兴值,这个高兴值等于他的身高减去第一个同学的身高。当然比第一个同学矮的同学产生兴奋值为 0 0

现在体育老师来了,他拥有神奇的魔法,现在他能做如下的三件事:

  • 1:询问某段区间高兴值最大的那个是多少。
  • 2:把某两个同学交换一下位置。
  • 3:选取一段区间的人,把第一个人身高加上 t t ,第二个加上 2t 2t ,第三个加上 3t 3t 以此类推。

但是体育老师不会数数,于是他找到你了,对于每一个询问,他要你帮他求出那个值。

输入格式

第一行两个整数 n,m n,m 表示有 n n 个人,有 m m 个操作。

第二行 n n 个整数,顺序输入每个人的身高。(身高 108 \leq 10^8

接下来 m m 行,每行第一个数位一个 type \rm type 表示是做哪一件事情。

  • 如果 type=1 \rm type=1 ,那么接下来有两个整数 l l r r ,表示询问这段区间的最大的高兴值
  • 如果 type=2 \rm type=2 ,接下来两个整数 a a b b ,表示交换这两个位置的人
  • 如果 type=3 \rm type=3 ,接下来三个整数 l,r,t l,r,t ,表示把 l l 个人的升高增加 t t , l+1 l+1 个人增加 2t 2t ……第 r r 个人增加 (rl+1)t,(0t10000) (r-l+1)t,(0 \leq t \leq 10000)

输出格式

对于每个询问按照顺序输出每个操作1的答案。

样例输入

10 7
10 9 8 7 6 5 4 3 2 1
1 4 7
3 2 4 3
1 2 3
1 3 6
2 1 10
1 8 10
1 2 3

样例输出

0
4
6
9
13

数据规模与约定

对于 100%100\% 的数据: n,m1×105 n,m \leq 1\times 10^5