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

Đống của những chiếc đống

Đề bài

Mô tả

Cho một mảng gồm n số nguyên a1,a2,,an.

Với một số nguyên k cho trước, ta xây dựng một đống (heap) k-phân trên mảng: coi các phần tử của mảng là các đỉnh của một cây có gốc, đánh số từ 1 đến n. Các con của đỉnh v là những đỉnh có chỉ số k(v1)+2, k(v1)+3, , kv+1 (nếu chỉ số vượt quá n thì con tương ứng không tồn tại). Đỉnh 1 là gốc và không có cha; mọi đỉnh khác đều có đúng một cha. Gọi p(v) là chỉ số cha của đỉnh v.

Một đỉnh không phải gốc v được gọi là vi phạm tính chất đống nếu av<ap(v) (giá trị của nó nhỏ hơn giá trị của cha).

Với mỗi giá trị k từ 1 đến n1, hãy đếm số đỉnh vi phạm tính chất đống trong đống k-phân dựng trên mảng đã cho.

Dữ liệu vào

  • Dòng đầu chứa số nguyên n.
  • Dòng thứ hai chứa n số nguyên a1,a2,,an.

Dữ liệu ra

In ra n1 số nguyên, cách nhau bởi dấu cách: số thứ k là số đỉnh vi phạm tính chất đống trong đống k-phân, với k=1,2,,n1.

Ràng buộc

  • 2n2·105
  • 109ai109

Ví dụ

Input Output Giải thích
5
1 5 4 3 2
3 2 1 0 Với k=1 cây là một đường thẳng 12345. Cha của đỉnh 3,4,5 lần lượt có giá trị 5,4,3, còn giá trị của chúng là 4,3,2 đều nhỏ hơn cha nên cả ba đều vi phạm, cho kết quả 3. Khi k tăng, cây thấp và rộng hơn nên số vi phạm giảm dần về 0.
6
2 2 2 2 2 2
0 0 0 0 0 Mọi phần tử bằng nhau nên không có đỉnh nào nhỏ hơn cha của nó.
5
934 235 171 111 197
3 4 4 4 Số vi phạm không nhất thiết giảm khi k tăng.

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 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