Tôi đang chuẩn bị cho cuộc thi ACM và tôi bị kẹt với vấn đề này.Tính giá trị tối đa từ [currPos] thành [currPos - k] với mảng lớn
Bạn có tòa nhà có vị trí nhất định Xi và chiều cao Hi lá chắn được làm bằng thép và họ cần phải được hỗ trợ bởi ít nhất hai tòa nhà có chiều cao tương tự. Đầu bên phải của lá chắn phải nằm trên đỉnh của một số tòa nhà. Tất cả các tòa nhà nằm dưới tấm khiên (bao gồm cả những cái nằm ở cuối) đều được bảo vệ bởi chiếc khiên đó và chiều cao của chúng không thể vượt quá chiều cao mà lá chắn được đặt. Một tòa nhà có thể được bảo vệ với tối đa một lá chắn.
Bạn được cấp số lượng lá chắn vô hạn, mỗi lá có cùng độ dài L. Tìm số lượng tối đa các tòa nhà có thể được bảo vệ bằng khiên và tìm số lượng khiên tối thiểu có thể được sử dụng để bảo vệ số lượng tòa nhà tối đa .
Input
Dòng đầu tiên chứa một số nguyên dương T (1 < = T < = 20), số lượng các trường hợp thử nghiệm.
Mỗi trường hợp thử nghiệm bắt đầu với một dòng có chứa chính xác hai số nguyên: số lượng các tòa nhà N (2 < = N < = 100.000) và chiều dài của một L khiên (1 < = L < = 1000000000). Trong mỗi dòng N tiếp theo có hai số nguyên, Xi (vị trí của tòa nhà thứ i, 0 < = Xi < = 1.000.000.000) và Hi (chiều cao của tòa nhà thứ i, 1 < = Hi < = 1.000.000.000). Các tòa nhà được sắp xếp theo tọa độ x của chúng. Sẽ không có hai tòa nhà có cùng tọa độ x.
Output
Đối với mỗi trường hợp kiểm tra, trên hai đường thẳng, đầu ra số lượng tối đa của các tòa nhà có thể được bảo hiểm và số lượng tối thiểu của lá chắn có thể được sử dụng cho mục đích đó.
Ví dụ
Input
17 3
1 2
2 1
3 2
4 3
5 1
6 2
7 4
8 2
9 3
10 4
11 2
15 2
16 1
17 3
18 3
19 1
20 2
Output
11 3
Explanation:
first shield: 1,2,3
second shield: 7,8,9,10
third shield: 15,16,17,18
Rõ ràng brute-force giải pháp được dễ dàng mã để mã nhưng sẽ thất bại về thời hạn (1s), tôi đã được đọc về cây phân đoạn, nhưng kể từ khi tôi chưa từng làm việc với phân khúc cây tôi quan tâm là cách để giải quyết vấn đề này hoặc là có một số giải pháp dễ dàng hơn mà tôi đang bỏ lỡ?
PS Mặc dù nó cho biết chiều dài lá chắn là L, nó thực sự là L + 1, tòa nhà cuối cùng phải cao nhất và có tòa nhà ở vị trí [Xi-1, Xi-L] với cùng chiều cao để có thể đặt lá chắn và vị trí xây dựng sẽ được sắp xếp.