trang chủ / đề bài / marathong

Marathon (Gold)

Đề bài

Mô tả

Có N điểm kiểm tra trên mặt phẳng. Một vận động viên đi từ điểm I đến điểm J (theo thứ tự I,I+1,…,J), và được phép bỏ qua đúng một điểm kiểm tra trung gian (không được bỏ điểm I hoặc J) để rút ngắn quãng đường.

Khoảng cách giữa hai điểm được tính theo khoảng cách Manhattan: |x1−x2|+|y1−y2|.

Cho Q truy vấn, mỗi truy vấn là một trong hai loại:

  • U k x y — cập nhật toạ độ điểm k thành (x,y).
  • Q I J — hỏi quãng đường ngắn nhất từ I đến J (có thể bỏ qua một điểm trung gian).

Dữ liệu vào

Dòng đầu chứa hai số nguyên N và Q.

  • N dòng tiếp theo, mỗi dòng chứa hai số nguyên xi, yi — toạ độ điểm kiểm tra thứ i.

  • Q dòng tiếp theo, mỗi dòng là truy vấn dạng U k x y hoặc Q I J (với 1≤I<J≤N).

Dữ liệu ra

Với mỗi truy vấn Q I J, in ra quãng đường ngắn nhất trên một dòng.

Ràng buộc

  • 1≤N,Q≤100000
  • −1000≤xi,yi≤1000
  • Với truy vấn Q: 1≤I<J≤N
  • Với truy vấn U: 1≤k≤N

Ví dụ

Input Output Giải thích
5 5
-4 4
-5 -3
-1 5
-3 4
0 5
Q 1 5
U 4 0 1
U 4 -1 1
Q 2 4
Q 1 4
11
8
8
Q(1,5): tổng=27, bỏ điểm 2 tiết kiệm 16, đáp án=11. Sau hai cập nhật điểm 4: Q(2,4): tổng=16, bỏ điểm 3 tiết kiệm 8, đáp án=8. Q(1,4): tổng=24, bỏ điểm 2 tiết kiệm 16, đáp án=8.
2 1
0 0
3 4
Q 1 2
7 Chỉ 2 điểm, không có điểm trung gian để bỏ, khoảng cách Manhattan = 3+4 = 7.

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