아직 만들고 있는 페이지입니다.

이 페이지는 아직 만드는 중입니다. 보이는 내용은 바뀔 수 있습니다.

RMQ

시간 제한3초메모리 제한1024 MB

요약
순열 A가 주어질 때, 각 질의마다 l <= i <= r, s <= j <= e 범위의 모든 부분 구간 [i, j]에서 최솟값과 최댓값의 곱을 구하고 합을 10^9+7로 나눈 나머지를 출력합니다.
난이도

어려움10점 중 9점

유형
세그먼트 트리, 누적 합, 분할 정복
정답자
아직 제출이 없습니다

문제

길이 NN의 수열 AA가 주어진다. 각 원소는 11 이상 NN 이하의 정수이고, 같은 값은 한 번만 나온다.

수열 AA에 대한 RMQ는 보통 Range Minimum Query 또는 Range Maximum Query를 뜻한다. 1≤l≤r≤N1 \le l \le r \le N인 ll과 rr이 주어졌을 때 min⁡(Al,⋯ ,Ar)\min(A_l, \cdots, A_r) 또는 max⁡(Al,⋯ ,Ar)\max(A_l, \cdots, A_r)를 구하는 쿼리이다.

어떤 쿼리도 포기하지 못하는 종영이는 새로운 RMQ를 만들기로 했다. 종영이가 만든 RMQ(Range Mueonga Query)는 RMQ(l,r)=min⁡(Al,⋯ ,Ar)×max⁡(Al,⋯ ,Ar)RMQ(l,r)=\min(A_l, \cdots, A_r) \times \max(A_l, \cdots, A_r)이다.

모든 쿼리 값을 기억하려고 NN행 NN열의 2차원 배열 BB를 만들었다. ii행 jj열의 값 Bi,jB_{i,j}는 i≤ji \le j이면 RMQ(i,j)RMQ(i,j)이고, i>ji>j이면 00이다.

쿼리 중독증이 있는 종영이는 이제 BB에 대해 2차원 쿼리를 날리고 싶어졌다. 1≤l≤r≤N1 \le l \le r \le N이고 1≤s≤e≤N1 \le s \le e \le N인 정수 네 개 ll, rr, ss, ee가 주어질 때마다, l≤i≤rl \le i \le r이고 s≤j≤es \le j \le e인 모든 ii, jj에 대해 Bi,jB_{i,j}의 합을 구하자.

입력

첫째 줄에 NN과 QQ가 공백으로 구분되어 주어진다. (1≤N≤150 0001 \le N \le 150\,000, 1≤Q≤150 0001 \le Q \le 150\,000)

둘째 줄에 A1,⋯ ,ANA_1, \cdots, A_N이 공백으로 구분되어 주어진다. (1≤Ai≤N1 \le A_i \le N)

셋째 줄부터 QQ개의 줄에 걸쳐 쿼리가 주어진다. 각 쿼리는 공백으로 구분된 ll, rr, ss, ee로 이루어진다. (1≤l≤r≤N1 \le l \le r \le N, 1≤s≤e≤N1 \le s \le e \le N)

출력

각 쿼리의 답을 109+710^9+7로 나눈 나머지를 한 줄에 하나씩 출력한다.

예제1

  1. 예제 1

    입력
    10 10
    7 6 1 10 5 3 2 4 8 9
    1 2 7 8
    7 9 8 8
    2 10 8 8
    5 10 1 4
    7 9 2 9
    1 7 8 10
    3 8 5 9
    3 10 2 6
    1 4 4 8
    1 3 1 5
    
    예상 출력
    40
    24
    82
    0
    140
    278
    381
    260
    370
    201