Processing math: 100%

時間制限 : sec, メモリ制限 : KB
English / Japanese  

RMQ and RAQ

数列 A = {a0,a1,...,an1} に対し、次の2つの操作を行うプログラムを作成せよ。

  • add(s,t,x) : as,as+1,...,atx を加算する。
  • find(s,t) : as,as+1,...,at の最小値を出力する。

ただし、ai(i=0,1,...,n1) は、0で初期化されているものとする。

Input

n q
query1
query2
:
queryq

1行目に A の要素数 n , クエリの数 q が与えられる。続く q 行に、 i 番目のクエリ queryi が与えられる。 queryi は以下のいずれかの形式で与えられる。

0 s t x

または

1 s t

各クエリの最初の数字は、クエリの種類を示し、'0'が add(s,t,x) , '1'が find(s,t)を表す。

Output

find クエリについて、最小値を1行に出力せよ。

Constraints

  • 1n100000
  • 1q100000
  • 0st<n
  • 1000x1000

Sample Input 1

6 7
0 1 3 1
0 2 4 -2
1 0 5
1 0 1
0 3 5 3
1 3 4
1 0 5

Sample Output 1

-2
0
1
-1

 
BESsBESsBESsBESsBESsBESsBESsBESs