오와 열 Batch
| 시간 제한 | 메모리 제한 | 제출 횟수 | 제출한 사람 수 | 해결한 사람 수 | 정답률 |
|---|---|---|---|---|---|
| 1000 ms | 1024 MiB | 3 | 3 | 3 | 100.00% |
포스텍 학생들이 포스텍의 눈부신 ICPC 대회 활약을 응원하기 위해 운동장에 모였다! 포스텍 팀의 코치 포닉스는 학생들이 질서 있게 대회를 응원할 수 있도록 관리하는 업무를 맡았다.
응원 학생들이 $N$개의 열을 이루어 서있고, 각 $i$번째 열에 있는 학생 수를 $A_i$라고 하자. 배열 $A = [A_1, … , A_N]$이 아래 조건을 만족할 경우, $A$를 인원파악 배열이라고 부른다.
$A_1 \le A_2 \le … \le A_N \le A_1 + 1$
포닉스는 학생들이 인원파악 배열에 맞게 서있는 것을 선호한다. 대열이 인원파악 배열을 이룰 경우, 포닉스는 해당 대열의 가로 인원수와 세로 인원수, 그리고 맨 마지막 줄의 인원수만 세면 총 인원수를 쉽게 알 수 있기 때문이다.
포닉스는 아래 연산을 통해 학생들의 대열을 통제할 수 있다.
- 현재 $A_i > A_{i+1}$ 을 만족하는 $i$를 하나 고른다.
- 이후 $i$열 우로 밀착! 이라고 외치면 $i$열의 맨 뒷사람이 $i+1$열로 이동한다. 즉, $A_i$에는 $A_i - 1$로, $A_{i+1}$에는 $A_{i+1} + 1$ 로 값이 변경된다. 어떤 $i$가 $A_i > A_{i+1}$ 을 만족하지 않는다면 $i$열에 우로 밀착 연산을 사용할 수 없다.
어떤 배열에 우로 밀착 연산을 $0$번 이상 유한 번 사용하여 인원파악 배열로 바꿀 수 있다면, 해당 배열을 에이스 배열이라고 하자. 주어진 $A = [A_1, A_2, … , A_N]$에 대해, 아래의 쿼리를 해결하는 프로그램을 작성해 포닉스의 업무를 도와주자.
- $\texttt{l r}$ : $A[l \cdots r]$이 에이스 배열이면 $\texttt{YES}$, 아니면 $\texttt{NO}$를 출력한다.
입력 형식
첫째 줄에 배열의 길이 $N$이 주어진다. ($1 \le N \le 100\ 000$)
둘째 줄에 $N$개의 정수 $A_1, A_2, \cdots, A_N$이 공백으로 구분되어 주어진다. ($1 \le A_i \le 10^9$)
셋째 줄에 쿼리의 개수 $Q$가 주어진다. ($1 \le Q \le 100\ 000$)
넷째 줄부터 $Q$개의 줄에 걸쳐 쿼리가 다음과 같은 형식으로 주어진다.
- $\texttt{l r}$ ($1 \le l \le r \le N$)
출력 형식
$Q$개의 줄에 걸쳐 각 쿼리에 대한 답을 $\texttt{YES}$ 혹은 $\texttt{NO}$로 출력한다.
예제
예제 1
입력
9
9 9 8 2 4 4 3 5 3
4
1 3
4 6
5 9
1 4출력
YES
NO
YES
YES