만드는 중입니다

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

동적 볼록 껍질

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

요약
삽입과 삭제가 있는 (x-a)^4+b 함수 집합에서 주어진 x의 최솟값을 구하는 문제입니다.
난이도

어려움10점 중 9점

유형
기하, 세그먼트 트리, 분할 정복
정답자
아직 제출이 없습니다

문제

먼저 관련된 고전 알고리즘을 살펴보자. nn개의 함수 f1(x),f2(x),…,fn(x)f_1(x), f_2(x), \dots, f_n(x)가 주어지며, fi(x)=aix+bif_i(x)=a_i x+b_i이다. 고정된 매개변수 xx에 대해 모든 ii에 걸친 fi(x)f_i(x)의 최솟값을 구하려면, 볼록 껍질 위에서 해당 함수를 찾으면 된다.

이제 nn개의 함수 f1(x),f2(x),…,fn(x)f_1(x), f_2(x), \dots, f_n(x)가 주어지며, fi(x)=(x−ai)4+bif_i(x)=(x-a_i)^4+b_i이다. 이 함수들에 대해 mm개의 연산을 수행해야 한다. 각 연산은 다음 중 하나의 형태이다.

  • "1 aa bb" (1≤a≤50 0001 \leq a \leq 50\,000, 1≤b≤10181 \leq b \leq 10^{18}): 새로운 함수 fn+1(x)=(x−a)4+bf_{n+1}(x)=(x-a)^4+b를 추가한 뒤 nn을 n+1n+1로 바꾼다.
  • "2 tt" (1≤t≤n1 \leq t \leq n): 함수 ft(x)f_t(x)를 삭제한다. 각 함수는 두 번 이상 삭제되지 않는다고 보장된다.
  • "3 xx" (1≤x≤50 0001 \leq x \leq 50\,000): 1≤i≤n1 \leq i \leq n이고 아직 삭제되지 않은 함수 fi(x)f_i(x) 중에서 최솟값을 구한다.

입력

첫째 줄에 테스트 케이스의 개수 TT (1≤T≤51 \leq T \leq 5)가 주어진다. 각 테스트 케이스는 다음과 같다.

첫째 줄에 함수의 개수 nn과 연산의 개수 mm (1≤n,m≤100 0001 \leq n, m \leq 100\,000)이 주어진다.

이어서 nn개의 줄에 각각 ii번째 함수 fi(x)f_i(x)를 정하는 정수 aia_i와 bib_i (1≤ai≤50 0001 \leq a_i \leq 50\,000, 1≤bi≤10181 \leq b_i \leq 10^{18})가 주어진다.

다음 mm개의 줄에는 연산이 하나씩 주어진다. 각 연산의 형식은 위와 같다.

출력

각 질의에 대해 fi(x)f_i(x)의 최솟값을 한 줄에 출력한다. 함수가 하나도 없으면 "-1"을 출력한다.

예제1

  1. 예제 1

    입력
    1
    2 8
    3 9
    6 100
    3 4
    2 1
    3 4
    1 1 1
    3 4
    2 2
    2 3
    3 4
    
    예상 출력
    10
    116
    82
    -1