페이지가 로드되지 않나요? 여기를 눌러보면 고쳐질 수도 있어요.
Placeholder

#3370

농구 토너먼트 2s 512MB

문제

농구 코치인 당신은 n명의 선수들을 관리하며, 각 선수들은 1번부터 n번까지 번호가 매겨져 있다. i번 선수의 키는 hi cm이다.

 

다음은 P(S)에 관한 정의이다.

- f(i , j)=hi+hj이다.

- P(S)는 선수 팀(집합) S에 존재하는 모든 선수들의 번호를 가지고 만든 순서쌍 (i,j)에 있어서, f(i , j)의 합이다. 수식으로 표현하자면 아래와 같다.

- 예를 들어, 어떤 선수 팀 S에 속한 두 선수의 키가 {2, 3} 이라면, P(S) = f(1 , 1) + f(1 , 2) + f(2 , 1) + f(2 , 2) = 4+5+5+6 = 20이다.

 

정올 농구 토너먼트는 방식이 조금 특이하여, 이하 설명을 만족하는 팀만이 출전할 수 있다. 

토너먼트는 m라운드로 진행되며, 각 라운드마다 l, r, x가 주어진다. 

당신은 선수 번호가 구간 [l,r]에 있는 선수들 중, 연속된 번호를 가진 선수들로만 팀을 꾸릴 수 있다.

(예를 들어, l = 1이고 r = 3이면, 선수 1과 선수 3만으로 팀을 꾸릴 수는 없다.) 

이 팀을 집합 S라고 할 때, P(S)가 x 이상이어야만 한다는 규칙이 있다. 

당신은 이 규칙을 만족하면서 그 팀의 선수들의 가장 큰 키가 최소가 되도록 하고 싶다.

 

각 라운드마다 가장 큰 키를 최소화시키는 팀을 꾸릴 때, 그 최소값을 출력하는 프로그램을 작성하라.​ 

 


입력

첫 줄에 두 정수 n, m이 공백을 사이에 두고 주어진다.

다음 줄에 n명의 선수들의 키인 hi가 번호 순서대로 공백을 사이에 두고 주어진다.

그 다음 m줄에 걸쳐서, 각 라운드의 l, r, x값이 주어진다. 

모든 입력 데이터에 있어서, 1≤n,m≤300,000, 1≤hi≤107, 1≤l≤r≤n, 1≤x≤1018을 만족한다. 


출력

m줄에 걸쳐, 각 라운드마다 가능한 팀의 가장 큰 키의 최소값을 출력한다.

만약 어떠한 방법으로도 구간 [l, r]에서 x이상의 P(S)를 가지는 팀을 꾸릴 수 없을 경우, -1을 출력한다.


부분문제

번호 점수 조건
#125점

n,m≤5,000을 만족한다. 

#250점

n,m≤50,000을 만족한다.

#325점

추가 제약이 없다.


예제 #1

5 2

1 1 2 3 4
1 5 2
1 5 11
1

2

예제 #2

5 4

1 3 2 4 6
1 3 3
1 3 2
2 4 10
1 1 900
2

1
3
-1

출처

Hackerrank, Hourrank 31
로그인해야 코드를 작성할 수 있어요.