Nộp bài | Các bài nộp | Làm tốt nhất | Về danh sách bài |
LEMHEAP - Hàng đợi có độ ưu tiên - Heap |
Định nghĩa Heap:
Heap là 1 cây nhị phân có n nút. Mỗi nút có từ 0, 1, 2 nút con. Nút không có con gọi là nút lá, nút gốc là nút không có cha. Nút cha luôn > (hay < ) 2 nút con tuỳ theo điều kiện ưu tiên, và ta ưu tiên nút con phải so với nút con trái. Như vậy nút gốc luôn chứa giá trị lớn nhất hoặc bé nhất. Mỗi phép cập nhật: xoá, thêm vào trên Heap đều thực hiện trong thời gian O(log N).
Hình biểu diễn 1 Heap ưu tiên quan hệ >
Xét bài toán:
Cho trước một danh sách rỗng. Người ta xét hai thao tác trên danh sách đó:
Thao tác "+V" (ở đây V là một số tự nhiên <= 1000000000): Nếu danh sách đang có ít hơn 15000 phần tử thì thao tác này bổ sung thêm phần tử V vào danh sách; Nếu không, thao tác này không có hiệu lực.
Thao tác "-": Nếu danh sách đang không rỗng thì thao tác này loại bỏ tất cả các phần tử lớn nhất của danh sách; Nếu không, thao tác này không có hiệu lực
Input
Gồm nhiều dòng, mỗi dòng ghi một thao tác. Thứ tự các thao tác trên các dòng được liệt kê theo đúng thứ tự sẽ thực hiện
Output
Dòng 1: Ghi số lượng những giá trị còn lại trong danh sách.
Các dòng tiếp theo: Liệt kê những giá trị đó theo thứ tự giảm dần, mỗi dòng 1 số
Example
Input: +1 +3 +2 +3 - +4 +4 - +2 +9 +7 +8 - Output: 4 8 7 2 1
Được gửi lên bởi: | special_one |
Ngày: | 2009-01-04 |
Thời gian chạy: | 0.100s |
Giới hạn mã nguồn: | 50000B |
Memory limit: | 1536MB |
Cluster: | Cube (Intel G860) |
Ngôn ngữ cho phép: | C CSHARP CPP JAVA PAS-FPC |