trang chủ / bài tập / skylines

Tòa nhà chọc trời

Đề bài

Mô tả

Cho một thành phố hình lưới có n đường ngang (Đông) và m đường dọc (Nam). Tại giao điểm của đường ngang thứ i và đường dọc thứ j có một tòa nhà chọc trời chiều cao ai,j.

Tại mỗi giao điểm (i,j), ta xét đường ngang thứ i và đường dọc thứ j — gồm n+m1 tòa nhà. Cần gán lại chiều cao cho n+m1 tòa nhà này, mỗi tòa được gán một số nguyên dương từ 1 đến x, sao cho:

  • Trong đường ngang thứ i: thứ tự so sánh (lớn hơn / nhỏ hơn / bằng nhau) giữa hai tòa nhà bất kỳ được giữ nguyên so với chiều cao gốc.
  • Trong đường dọc thứ j: thứ tự so sánh giữa hai tòa nhà bất kỳ cũng được giữ nguyên.
  • Giữa một tòa trên đường ngang và một tòa trên đường dọc (mà không phải là giao điểm) thì không có ràng buộc.

Với mỗi giao điểm (i,j), tìm giá trị x nhỏ nhất có thể.

Dữ liệu vào

Dòng đầu tiên chứa hai số nguyên nm.

n dòng tiếp theo, mỗi dòng chứa m số nguyên ai,1,ai,2,,ai,m — chiều cao các tòa nhà.

Dữ liệu ra

In ra n dòng, mỗi dòng chứa m số nguyên: giá trị x nhỏ nhất tại mỗi giao điểm.

Ràng buộc

  • 1n,m1000
  • 1ai,j109

Ví dụ

Input Output Giải thích
2 2
1 2
3 4
2 3
3 2
Tại (1,1): ba tòa 1,2,3 ở dòng 1 (giá trị 1,2) và cột 1 (giá trị 1,3) — nén còn {1,2,2} cần x=2. Tại (1,2): dòng 1 có 1<2, cột 2 có 2<4, đỉnh chung là 2 — cần x=3.
2 3
1 2 1
2 1 2
2 2 2
2 2 2
Mỗi hàng và mỗi cột chỉ có 2 giá trị phân biệt, nên không thể giảm x xuống dưới 2 tại bất kỳ giao điểm nào.

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.46 awk 1.3.4 gcc 16.1.0 csc 6.12.0.200 g++ 16.1.0 g++-themis 16.1.0 g++17 16.1.0 g++20 16.1.0 g++23 16.1.0 clang++ 22.1.6 dmd 2.112.0 dart 3.12.1 gforth 0.7.3 gfortran 12.2.0 go 1.26.3 groovyc 5.0.6 javac 25.0.3 node 26.2.0 kotlinc 2.3.21 sbcl 2.2.9 lua 5.4.8 nim 2.2.10 fpc 3.2.2 fpc-themis 3.2.2 perl 5.36.0 php 8.5.6 pike 8.0 pypy3 7.3.23 python3 3.14.5 racket 8.7 ruby 4.0.5 rustc 1.96.0 csc 5.3.0 ctoj-scratch 0.0.1 sed 4.9 tclsh 8.6 bun 1.3.14 deno 2.8.1 v 0.5.1 zig 0.16.0