canuc80k0316·17/50

Dãy Số Theo Thứ Tự Tăng

Nộp bài trên LQDOJ

Bài 03 · Sorting

Một kho dữ liệu ghi lại số nguyên dương. Hãy sắp xếp toàn bộ các số theo thứ tự không giảm. Nếu một giá trị xuất hiện nhiều lần, tất cả các lần xuất hiện của nó đều phải được giữ lại trong kết quả.

Input

  • Dòng đầu chứa số nguyên . Trong dòng tiếp theo, dòng thứ chứa số nguyên .

Output

  • In dòng. Mỗi dòng chứa một số của dãy sau khi sắp xếp không giảm.

Constraints

Scoring

  • Subtask ( điểm): .
  • Subtask ( điểm): Theo đầy đủ các giới hạn đã nêu.

Example

Test 1

Input

8
4
1
4
2
10000
2
1
7

Output

1
1
2
2
4
4
7
10000

Giải thích: Các giá trị và đều xuất hiện hai lần, nên mỗi giá trị vẫn được in hai lần sau khi sắp xếp.

Lời giải tóm tắt
  • Ý tưởng: Vì mọi số chỉ nằm trong một miền nhỏ, ta lưu số lần xuất hiện của từng giá trị thay vì lưu cả dãy.
  • Thuật toán: Khởi tạo mảng tần suất cho các giá trị từ 1 đến 10000. Đọc từng số và tăng tần suất tương ứng. Sau đó duyệt giá trị từ nhỏ đến lớn và in mỗi giá trị đúng số lần đã đếm.
  • Chứng minh tính đúng đắn: Sau bước đọc, tần suất của mỗi giá trị bằng đúng số bản sao của nó trong input. Vòng xuất đi theo thứ tự tăng và in đúng từng bản sao, nên kết quả vừa giữ nguyên đa tập đầu vào vừa không giảm.
  • Độ phức tạp: O(n + 10000) thời gian và O(10000) bộ nhớ.