만드는 중입니다

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

사이클 시프트와 최소 역전 수

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

요약
순열에 부분 배열 순환 이동 갱신을 적용한 뒤마다, 순환 회전의 역전 수가 가장 작아지는 가장 작은 이동량 k를 출력한다.
난이도

어려움10점 중 8점

유형
배열, 동적 계획법, 그리디, 수학
정답자
아직 제출이 없습니다

문제

수열 ss의 사이클 시프트란 kk (0≤k<∣s∣0 \leq k < |s|) 위치만큼 밀어 얻은 다음 수열 sksk+1…s∣s∣−1s0s1…sk−1s_{k} s_{k+1} \ldots s_{|s|-1} s_0 s_1 \ldots s_{k-1}을 말한다. 인덱스는 0부터 시작한다. 예를 들어 0 위치만큼의 사이클 시프트는 원래 수열과 같다.

처음에 항등 순열 (0,1,…,n−10, 1, \ldots, n-1)인 순열이 있다.

다음과 같은 질의를 여러 번 처리한다. 순열의 부분 배열을 어떤 위치 수만큼 사이클 시프트한 것으로 교체한다. 형식적으로 l,r,kl, r, k가 주어지며 0≤l<r≤n0\leq l < r \leq n, 1≤k<r−l1 \leq k < r - l이고, 인덱스 ll과 rr 사이의 부분 배열(반열린 구간, ll번째 원소는 포함하고 rr번째는 포함하지 않음)을 kk 위치만큼 사이클 시프트한 것으로 교체한다. 예를 들어 순열 [1,0,3,4,2][1, 0, 3, 4, 2]에 l=1,r=4,k=1l = 1, r = 4, k = 1로 이 연산을 적용하면 순열 [1,3,4,0,2][1, 3, 4, 0, 2]가 된다.

각 질의 후에 역전 수가 최소인 순열의 사이클 시프트를 구한다.

순열의 변경은 유지되며 질의 사이에 되돌려지지 않는다.

입력

첫째 줄에 두 정수 nn과 qq (2≤n≤105,1≤q≤1052 \leq n \leq 10^5, 1 \leq q \leq 10^5)가 주어진다. 이는 각각 순열의 길이와 질의의 수이다.

다음 qq개의 줄이 주어진다. ii번째 줄에는 세 정수 li,ri,kil_i, r_i, k_i (0≤li<ri≤n,1≤ki<ri−li0 \leq l_i < r_i \leq n, 1 \leq k_i < r_i - l_i)가 주어지며, 이는 ii번째 질의의 매개변수이다.

출력

qq개의 줄을 출력한다. ii번째 줄에는 처음 ii개의 질의를 처리한 후의 순열을 kk (0≤k<n0 \leq k < n) 위치만큼 사이클 시프트한 것 중 역전 수가 최소인 kk를 출력한다. 가능한 kk가 여러 개라면 가장 작은 것을 출력한다.

힌트

첫 번째 예시에서 수정 후 순열은 [0,4,5,6,1,2,3,7][0, 4, 5, 6, 1, 2, 3, 7]이다. 역전 수가 최소인 사이클 시프트는 [1,2,3,7,0,4,5,6][1, 2, 3, 7, 0, 4, 5, 6]이다.

예제2

  1. 예제 1

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

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