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

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

쇼핑 잔돈

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

요약
고정된 거스름돈 수열과 여러 지갑이 주어질 때, 각 지갑에 거스름돈을 끼워 넣어 전체 역전 수가 최소가 되는 위치를 찾는다.
난이도

어려움10점 중 8점

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

문제

Felix와 그의 친구 M명은 오늘 쇼핑을 하며 지갑을 정리하고 있다. 최근 현금 거래로 Felix는 N장의 지폐로 된 잔돈을 받았다. Felix는 받은 지폐를 순서를 바꾸지 않고 지갑에 끼워 넣으려 한다.

예를 들어 Felix가 N = 4장의 지폐를 다음 순서로 받았다고 하자: C1 C2 C3 C4. Felix의 지갑에 W1 W2 W3 순서로 3장의 지폐가 있다면, 잔돈을 지갑에 끼워 넣는 방법은 네 가지다.

  1. 첫 번째 지폐 앞에 끼워 넣는다. 끼워 넣은 후 지갑의 지폐 순서는 C1 C2 C3 C4 W1 W2 W3이다.
  2. 첫 번째와 두 번째 지폐 사이에 끼워 넣는다. 끼워 넣은 후 지갑의 지폐 순서는 W1 C1 C2 C3 C4 W2 W3이다.
  3. 두 번째와 세 번째 지폐 사이에 끼워 넣는다. 끼워 넣은 후 지갑의 지폐 순서는 W1 W2 C1 C2 C3 C4 W3이다.
  4. 세 번째 지폐 뒤에 끼워 넣는다. 끼워 넣은 후 지갑의 지폐 순서는 W1 W2 W3 C1 C2 C3 C4이다.

Felix는 정리 정돈을 좋아하기 때문에 지갑 속 지폐가 최대한 정렬되어 있기를 바란다. 따라서 잔돈을 끼워 넣은 뒤 지갑의 반전 수가 최소가 되도록 끼워 넣으려 한다. 지갑의 반전 수란 지갑 안 지폐 쌍 (x, y) 중 다음 조건을 만족하는 쌍의 개수이다.

  • 지폐 x가 지폐 y보다 앞에 있고,
  • 지폐 x의 가치가 지폐 y의 가치보다 엄격하게 크다.

오늘은 좀 관대해진 Felix는 잔돈을 자신이 가지지 않고 친구 한 명에게 주고, 그 친구의 지갑에 잔돈을 끼워 넣으려 한다. i번째 친구의 지갑에는 Li장의 지폐가 있고, 그 가치는 지갑의 앞에서 뒤로 Wi[1], Wi[2], ..., Wi[Li]이다. Felix는 잔돈을 끼워 넣은 뒤 친구 지갑의 반전 수를 최소로 만들 수 있는 친구에게 잔돈을 주려 한다. 따라서 각 친구에 대해, 잔돈을 그 친구의 지갑에 끼워 넣었을 때의 최소 반전 수를 구해야 한다.

입력

첫 줄에 두 정수 N M (1 ≤ N, M ≤ 100 000)이 주어진다. N은 잔돈의 지폐 수, M은 Felix의 친구 수이다. 다음 줄에 N개의 정수 Ci (1 ≤ Ci ≤ 109)가 주어진다. Ci는 잔돈 지폐의 가치이다. 다음 M개 줄 각각은 정수 Li (1 ≤ Li ≤ 200 000)로 시작한다. Li는 i번째 친구 지갑의 지폐 수이다. 이어서 Li개의 정수 Wi[j] (1 ≤ Wi[j] ≤ 109)가 주어진다. Wi[j]는 지갑 지폐의 가치이다. 모든 Li의 합은 200 000 이하이다.

출력

각 친구에 대해 입력 순서대로, Felix가 그 친구의 지갑에 잔돈을 끼워 넣었을 때의 최소 반전 수를 한 줄에 하나씩 출력한다.

예제2

  1. 예제 1

    입력
    3 3
    5 6 7
    6 2 3 4 8 9 10
    2 100 99
    3 5 6 7
    
    예상 출력
    0
    1
    1
    
  2. 예제 2

    입력
    3 2
    7 6 5
    6 2 3 4 8 9 10
    6 10 9 8 4 3 2
    
    예상 출력
    3
    27