만드는 중입니다

아직 만드는 중이라 바뀔 수 있습니다

수열과 쿼리 35

시간 제한7초메모리 제한512 MB

요약
순열이 주어지고, 각 질의마다 구간을 오른쪽으로 k칸 회전한 뒤 길이 3인 증가 부분 수열이 있는지 확인합니다.
난이도

어려움10점 중 8점

유형
세그먼트 트리, 배열, 구현
정답자
아직 제출이 없습니다

문제

길이가 NN인 수열 A1,A2,…,ANA_1, A_2, \ldots, A_N이 주어진다. 수열의 모든 수는 11 이상 NN 이하이며 서로 다르다. 이때 다음 쿼리를 처리하는 프로그램을 작성하시오.

  • l r k: 부분배열 [Al,Al+1,…,Ar][A_l, A_{l+1}, \ldots, A_r]을 kk만큼 오른쪽으로 시프트한다. 즉, AlA_l은 Al+kA_{l+k}가 되고, Ar−kA_{r-k}는 ArA_r이 되고, Ar−k+1A_{r-k+1}은 AlA_l이 되고, ArA_r은 Al+k−1A_{l+k-1}이 된다. 쿼리를 처리한 뒤 수열에 길이 3의 증가하는 부분 수열이 있으면 YES를, 없으면 NO를 출력한다.

입력

첫째 줄에 수열의 크기 NN이 주어진다. (1≤N≤120,0001 \le N \le 120,000)

둘째 줄에 A1,A2,…,ANA_1, A_2, \ldots, A_N이 주어진다. 모든 수는 서로 다르다. (1≤Ai≤N1 \le A_i \le N)

셋째 줄에 쿼리의 개수 MM이 주어진다. (1≤M≤120,0001 \le M \le 120,000)

넷째 줄부터 MM개의 줄에 쿼리가 한 줄에 하나씩 주어진다. (1≤L≤R≤N1 \le L \le R \le N, 0≤K≤R−L+10 \le K \le R-L+1)

출력

각 쿼리의 결과를 한 줄에 하나씩 출력한다.

예제4

  1. 예제 1

    입력
    6
    2 5 6 1 3 4
    1
    1 6 5
    
    예상 출력
    YES
    
  2. 예제 2

    입력
    8
    5 1 2 8 7 6 3 4
    4
    2 4 2
    4 5 1
    1 3 2
    3 8 2
    
    예상 출력
    YES
    YES
    YES
    YES
    
  3. 예제 3

    입력
    5
    4 3 2 5 1
    2
    3 4 1
    1 2 1
    
    예상 출력
    NO
    YES
    
  4. 예제 4

    입력
    6
    6 5 4 3 2 1
    3
    1 1 0
    1 3 1
    2 5 3
    
    예상 출력
    NO
    NO
    YES