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

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

클래스 통합

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

요약
선형 점화식으로 생성된 N개의 점수 구간과 Q개의 질의가 주어질 때, 합친 점수 목록에서 K번째로 큰 점수를 구하고 답들의 가중 합을 출력한다.
난이도

어려움10점 중 8점

유형
이분 탐색, 누적 합, 정렬, 수학
정답자
아직 제출이 없습니다

문제

Supervin은 1번부터 N번까지 번호가 붙은 N개의 클래스를 가르친다. 가장 최근 시험을 채점한 뒤, 그는 각 클래스의 학생 점수가 연속한 정수들의 수열을 이룬다는 사실을 알아냈다. 따라서 Supervin은 i번째 클래스의 점수 분포를 두 정수 Li와 Ri로 요약할 수 있다. 즉 i번째 클래스에는 Ri - Li + 1명의 학생이 있고, 각 x(Li ≤ x ≤ Ri)에 대해 점수가 x인 학생이 정확히 한 명씩 있다.

Supervin은 모든 클래스의 학생 점수를 하나로 모아 내림차순으로 정렬하려고 한다. 이 목록에 대해 Q개의 질문(1번부터 Q번까지 번호가 붙음)이 주어지며, i번째 질문에서는 Ki번째로 높은 점수가 무엇인지 알고 싶어 한다. (Ki가 전체 학생 수보다 크면 i번째 질문의 답은 0이다.)

Supervin이 모든 질문에 답하도록 도와줄 수 있는가? 답이 너무 많을 수 있으므로, 모두 출력하는 대신 답을 구했다는 증거를 출력한다. 즉 1 ≤ i ≤ Q인 모든 i에 대해 (Si × i)의 합을 출력하라. 여기서 Si는 i번째 질문의 답이다.

입력

입력의 첫 줄에는 테스트 케이스의 수 T가 주어진다. 이어서 T개의 테스트 케이스가 주어지며, 각 테스트 케이스는 네 줄로 이루어진다. 첫 줄에는 위에서 설명한 두 정수 N과 Q가 주어진다. 다음 세 줄에는 각각 다음과 같은 형식으로 여섯 개의 정수가 주어진다.

  • X1 X2 A1 B1 C1 M1
  • Y1 Y2 A2 B2 C2 M2
  • Z1 Z2 A3 B3 C3 M3

이 값들은 Li, Ri, Ki를 다음과 같이 생성하는 데 사용된다.

먼저 다음과 같이 정의한다.

  • Xi = (A1 × Xi - 1 + B1 × Xi - 2 + C1) modulo M1, i = 3부터 N까지.
  • Yi = (A2 × Yi - 1 + B2 × Yi - 2 + C2) modulo M2, i = 3부터 N까지.
  • Zi = (A3 × Zi - 1 + B3 × Zi - 2 + C3) modulo M3, i = 3부터 Q까지.

그리고 다음과 같이 정의한다.

  • Li = min(Xi, Yi) + 1, i = 1부터 N까지.
  • Ri = max(Xi, Yi) + 1, i = 1부터 N까지.
  • Ki = Zi + 1, i = 1부터 Q까지.

출력

각 테스트 케이스마다 Case #x: y 형식의 한 줄을 출력한다. 여기서 x는 테스트 케이스 번호(1부터 시작)이고, y는 1 ≤ i ≤ Q인 모든 i에 대해 (Si × i)의 합이다. Si는 i번째 질문의 답이다.

제한

  • 1 ≤ T ≤ 100.
  • 1 ≤ N ≤ 4 × 105.
  • 모든 i에 대해 0 ≤ Ai < Mi.
  • 모든 i에 대해 0 ≤ Bi < Mi.
  • 모든 i에 대해 0 ≤ Ci < Mi.
  • 0 ≤ X1 < M1.
  • 0 ≤ X2 < M1.
  • 0 ≤ Y1 < M2.
  • 0 ≤ Y2 < M2.
  • 0 ≤ Z1 < M3.
  • 0 ≤ Z2 < M3.
  • 모든 i에 대해 1 ≤ Mi ≤ 109.

예제1

  1. 예제 1

    입력
    2
    5 1
    3 1 4 1 5 9
    2 7 1 8 2 9
    4 8 15 16 23 42
    7 1
    2 3 4 5 6 31
    1 3 4 5 5 17
    2 2 1 3 2 100
    
    예상 출력
    Case #1: 7
    Case #2: 28