RiseOJ는 solved.ac와 제휴 관계가 없습니다. 티어 아이콘 © solved.ac. solved.ac
포럼
R00678

움직이는 껍질의 정점

Diamond II 다이아몬드 II
난이도
5s
시간 제한
256MB
메모리 제한
0
맞았습니다!!
0
제출 수
0.0%
정답률
레이팅

의견: 0

설명

평면 위에 점들을 하나씩 추가하면서, 추가된 점들에 대한 질의를 처리하는 문제이다. 처음에는 점이 하나도 없다. 다음 두 종류의 연산을 입력 순서대로 총 \(M\)번 처리한다.

  • 1 x y : 좌표가 \((x, y)\)인 점을 집합에 추가한다.

  • 2 a b : 지금까지 추가된 모든 점 \((x_i, y_i)\)\(a \cdot x_i + b \cdot y_i\) 의 최댓값을 출력한다.

즉, 점이 계속 추가되는 도중에 임의의 방향 벡터 \((a, b)\)에 대한 점들의 사영(내적) 최댓값을 즉시 답해야 한다. 2 연산이 주어지는 시점에는 항상 최소 한 개의 점이 존재함이 보장된다.

제약

\(1 \le M \le 100{,}000\)

\(-10^8 \le x, y \le 10^8\)

\(-10^8 \le a, b \le 10^8\), 단 \((a, b) \ne (0, 0)\)

2 연산은 점이 최소 하나 추가된 뒤에만 주어진다.

입력 형식

첫 줄에 연산의 개수 \(M\)이 주어진다.

이어서 \(M\)개의 줄에 위 형식의 연산이 한 줄에 하나씩 주어진다.

출력 형식

2 연산마다 \(a \cdot x_i + b \cdot y_i\) 의 최댓값을 한 줄에 하나씩 출력한다.

예제 1
입력
7
1 0 0
1 4 0
1 2 3
2 1 1
2 -1 0
1 5 -2
2 1 -1
출력
5
0
7
설명

점 (0,0),(4,0),(2,3) 추가 후 (a,b)=(1,1): 각 점의 x+y는 0,4,5 -> 최대 5. (a,b)=(-1,0): -x의 최대는 (0,0)에서 0. 점 (5,-2) 추가 후 (a,b)=(1,-1): x-y는 0,4,-1,7 -> 최대 7 ((5,-2)).

예제 2
입력
5
1 -3 -3
2 0 1
1 1 5
2 0 1
2 1 0
출력
-3
5
1
설명

(-3,-3) 추가 후 (0,1): y의 최대 -3. (1,5) 추가 후 (0,1): y의 최대 5. (1,0): x의 최대 1 ((1,5)).

문제 정보

riseoj 작성

출처 Original

평가 및 의견

움직이는 껍질의 정점

개요
출제자 난이도 Diamond II 다이아몬드 II 의견 0 / 50 공개 집계 (커뮤니티 난이도, 주요 주제, 품질)는 의견이 충분히 모이면 공개됩니다.

Log in to rate problems.

개별 의견

아직 의견이 없습니다. 자격이 된다면 위 양식에서 가장 먼저 평가해 보세요.

풀이 제출

움직이는 껍질의 정점

게스트로 둘러보고 있습니다. 로그인하면 풀이를 제출하고 진행 상황을 확인할 수 있습니다. 로그인하고 제출하기
공개
C++20 Tab 들여쓰기 · Ctrl+/ 주석 토글 · Enter 자동 들여쓰기
1 1 1 0 공백: 4 · UTF-8