trang chủ / đề bài / tst18_hull

Diện tích bao lồi

Đề bài

Mô tả

Cho P là một tập các điểm trên mặt phẳng. Ban đầu tập P rỗng. Có một dãy gồm n thao tác trên tập điểm này. Mỗi thao tác thuộc một trong hai dạng sau:

  1. Thêm một điểm có toạ độ nguyên vào tập P. Trong thao tác này điểm được thêm vào có hoành độ lớn hơn hẳn hoành độ các điểm hiện đang nằm trong P.
  2. Xoá khỏi P một số điểm có hoành độ lớn nhất.

Ta gọi bao lồi của tập P là đa giác lồi nhỏ nhất chứa tập P. Nhiệm vụ của bạn là tính diện tích của bao lồi sau mỗi thao tác.

Dữ liệu vào

Dòng đầu tiên gồm một số nguyên n (n≤105): số lượng thao tác.

Mỗi dòng trong n dòng tiếp theo gồm ba số nguyên t,x,y (0≤t≤1, 0≤x,y≤2·109). Gọi last, maxx, size lần lượt là hai lần diện tích bao lồi, hoành độ lớn nhất, kích thước của tập P trước khi thực hiện thao tác hiện tại. Ban đầu last=0 và nếu size=0, ta coi maxx=−109. Ta biến đổi t:=(t+last)mod2.

Nếu t=0, khi đó ta thực hiện thao tác 1, thêm điểm (x,y) vào tập sau khi biến đổi như sau:

  • x:=maxx+(last+x)mod(2·109+1);
  • y:=(y+last)mod(2·109+1)−109.

Dữ liệu đảm bảo |x|,|y|≤109 sau khi biến đổi.

Nếu t=1, ta thực hiện thao tác loại 2, xoá k điểm có hoành độ lớn nhất với k=(x+y+last)modsize+1. Dữ liệu đảm bảo size>0 khi thực hiện thao tác này.

Dữ liệu ra

Sau mỗi thao tác, in ra hai lần diện tích bao lồi của tập P trên một dòng.

Ràng buộc

  • n≤105;
  • 0≤t≤1, 0≤x,y≤2·109;
  • sau khi biến đổi: |x|,|y|≤109; khi xoá thì size>0.

Subtasks

  • Subtask 1 (15% số điểm): n≤300.
  • Subtask 2 (15% số điểm): n≤3000.
  • Subtask 3 (20% số điểm): số lượng thao tác loại 2 không quá 100.
  • Subtask 4 (50% số điểm): không có ràng buộc gì thêm.

Ví dụ

Input Output Giải thích
6
0 1000000000 1000000000
0 1000000 1001000000
0 1000000 999000000
0 1001500 1000001500
1 85072946 2
1 61619603 2
0
0
3000000000000
6000000000000
3000000000000
0
Sau khi biến đổi: thêm (0,0); thêm (106,106); thêm (2·106,−106), hai lần diện tích là 3·1012; thêm (3·106,0), hai lần diện tích là 6·1012; xoá k=1 điểm, còn {(0,0),(106,106),(2·106,−106)}; xoá k=2 điểm, còn {(0,0)}.
9
0 1000000000 1000000000
0 1 1000000003
0 1 1000000001
1 1999999997 999999999
1 2 0
1 1999999998 999999993
1 1 0
0 1000000000 1000000005
0 6 1000000005
0
0
5
10
5
14
0
0
0
Ví dụ bổ sung. Sau khi biến đổi: thêm (0,0), (1,3), (2,1), (3,4) (thao tác thứ tư có t=1 nhưng last=5 nên là thao tác thêm); xoá k=1; thêm (4,−2); xoá k=4 (tập rỗng); thêm (0,5), (6,5).

Bình luận

Không có bình luận tại thời điểm này.

gnatmake 12.2.0 a68g 3.1.2 nasm 2.16.1 as_x64 2.47 awk 1.3.4 gcc 16.2.0 dotnet 10.0.402 g++ 16.2.0 g++-themis 16.2.0 g++17 16.2.0 g++20 16.2.0 g++23 16.2.0 clang++ 22.1.8 dmd 2.113.0 dart 3.13.6 gforth 0.7.3 gfortran 15.3.0 go 1.27.3 groovyc 5.1.3 javac 26.0.2.1 node 26.12.1 julia 1.13.2 kotlinc 2.4.21 lean 4.35.0 sbcl 2.2.9 lua 5.5.1 nim 2.2.12 fpc 3.2.2 fpc-themis 3.2.2 perl 5.42.3 php 8.5.12 pike 8.0 swipl 9.0.4 pypy3 7.3.23 python3 3.15.1 racket 8.7 ruby 4.0.8 rustc 1.99.1 csc 5.3.0 ctoj-scratch 0.0.1 sed 4.9 swiftc 6.4.1 tclsh 8.6 bun 1.4.4 deno 2.9.8 v 0.5.2 zig 0.17.0