trang chủ / bài tập / crowdcows / lời giải

Bò chen chúc

Chỉ dùng lời giải này khi không có ý tưởng, và đừng copy-paste code từ lời giải này. Hãy tôn trọng người ra đề và người viết lời giải.
Nộp một lời giải chính thức trước khi tự giải là một hành động có thể bị ban.
Tác giả: huunguyenhuunguyen

Lời giải: Bò chen chúc

Hướng tiếp cận

Sắp xếp các con bò theo vị trí, sau đó dùng hai cửa sổ trượt (sliding window) với multiset để theo dõi chiều cao lớn nhất bên trái và bên phải trong khoảng cách D.

Nhận xét quan trọng

  1. Sau khi sắp xếp theo vị trí, ta có thể duyệt từ trái sang phải và duy trì hai multiset:
    • Multiset X: chứa chiều cao các bò trong khoảng [xiD,xi) (bên trái).
    • Multiset Y: chứa chiều cao các bò trong khoảng (xi,xi+D] (bên phải).
  2. Phần tử lớn nhất trong multiset chính là phần tử cuối, kiểm tra trong O(logN).

Thuật toán

  1. Sắp xếp N bò theo vị trí tăng dần.
  2. Duyệt từ trái sang phải. Duy trì hai con trỏ j (biên trái cho multiset X) và k (biên phải cho multiset Y).
  3. Với mỗi bò i:
    • Thêm các bò vào Y cho đến khi vượt quá xi+D.
    • Loại các bò ra khỏi X nếu khoảng cách vượt quá D.
    • Thêm bò i vào X.
    • Kiểm tra: max(X) 2hi VÀ max(Y) 2hi.
    • Loại bò i khỏi Y.
  4. Đếm tổng số bò thỏa mãn.

Độ phức tạp

  • Thời gian: O(NlogN)
  • Bộ nhớ: O(N)

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