USACO 2020 - Haircut

Xem PDF



Dạng bài
Ngôn ngữ cho phép
Assembly, Awk, C, C#, C++, Clang, Cobol, D, Groovy, Haskell, JS, Java, Kotlin, Lua, Node JS, OCaml, ObjectiveC, PHP, Pascal, Perl, Prolog, Pypy, Pypy 3, Python, Ruby, Rust, Scala, Scratch, Swift
Điểm: 1600 (p) Thời gian: 4.0s Bộ nhớ: 512M Input: bàn phím Output: màn hình

Mệt mỏi vì xoáy tóc cứng đầu của mình, Nông dân John quyết định đi cắt tóc. Ông có \(N\) (\(1 \leq N \leq 10^5\)) sợi tóc xếp thành một hàng, và ban đầu sợi tóc \(i\) dài \(A_i\) micromét (\(0 \leq A_i \leq N\)). Lý tưởng nhất, ông muốn độ dài tóc không giảm từ trái sang phải, vì vậy ông định nghĩa "độ xấu" của mái tóc là số nghịch thế: số cặp \((i,j)\) sao cho \(i < j\)\(A_i > A_j\).

Với mỗi \(j=0,1,\ldots,N-1\), FJ muốn biết độ xấu của mái tóc nếu tất cả các sợi dài hơn \(j\) đều bị cắt ngắn xuống đúng độ dài \(j\).

(Một sự thật thú vị: trung bình một người thực sự có khoảng \(10^5\) sợi tóc trên đầu!)

Dữ liệu vào

Tệp haircut.in:

Dòng đầu tiên chứa \(N\).

Dòng thứ hai chứa \(A_1,A_2,\ldots,A_N\).

Dữ liệu ra

Tệp haircut.out:

Với mỗi \(j=0,1,\ldots,N-1\), in độ xấu của mái tóc FJ trên một dòng mới.

Lưu ý rằng các số nguyên lớn xuất hiện trong bài này có thể đòi hỏi sử dụng kiểu dữ liệu số nguyên 64 bit (chẳng hạn long long trong C/C++).

Phân nhóm

  • Test 2 thỏa mãn \(N \leq 100\).
  • Các test 3–5 thỏa mãn \(N \leq 5000\).
  • Các test 6–13 không có ràng buộc bổ sung.

Ví dụ

Ví dụ 1

Input
5
5 2 3 3 0
Output
0
4
4
5
7
Giải thích

Dòng thứ tư của dữ liệu ra mô tả số nghịch thế khi các sợi tóc của FJ được cắt ngắn xuống độ dài 3. Khi đó \(A=[3,2,3,3,0]\) có năm nghịch thế: \(A_1>A_2,\,A_1>A_5,\,A_2>A_5,\,A_3>A_5,\)\(A_4>A_5\).

Nguồn

USACO 2020 US Open Contest, Gold — Haircut

Tác giả bài: Dhruv Rohatgi.

Bình luận

Mới nhất
Tải bình luận...

Không có bình luận nào.

Kỳ thi: