Có n yêu cầu với các kích thước mong muốn a1,a2,…,an và m tài nguyên có kích thước b1,b2,…,bm. Một yêu cầu có kích thước x có thể được ghép với một tài nguyên kích thước y khi ∣x−y∣≤k.
Mỗi yêu cầu và mỗi tài nguyên chỉ được dùng trong nhiều nhất một cặp. Hãy tìm số cặp lớn nhất có thể tạo.
Input
Dòng đầu chứa ba số nguyên n,m và k.
Dòng thứ hai chứa n số nguyên a1,a2,…,an.
Dòng thứ ba chứa m số nguyên b1,b2,…,bm.
Output
In ra một số nguyên - số cặp lớn nhất có thể tạo.
Constraints
1≤n,m≤2⋅105.
0≤k≤109.
1≤ai,bi≤109.
Scoring
Subtask 1 (50% số điểm): n,m≤12.
Subtask 2 (50% số điểm): Không có giới hạn bổ sung.
Example
Test 1
Input
6 5 3
30 41 44 50 65 70
28 39 46 67 80
Output
4
Giải thích: Có thể ghép các cặp kích thước (30,28),(41,39),(44,46) và (65,67). Không thể tạo cặp thứ năm, nên đáp án là 4.
Lời giải tóm tắt
Phân tích: Sau khi sắp xếp, ta luôn xét yêu cầu nhỏ nhất và tài nguyên nhỏ nhất chưa xử lý. Nếu tài nguyên quá nhỏ, nó không thể hợp với bất kỳ yêu cầu nào về sau. Nếu nó quá lớn, yêu cầu hiện tại không thể hợp với bất kỳ tài nguyên nào về sau.
Thuật toán: Sắp xếp hai dãy tăng dần và đặt hai con trỏ ở đầu. Loại phần tử chắc chắn quá nhỏ hoặc quá lớn theo ba trường hợp; khi chênh lệch không vượt k, tạo một cặp và tăng cả hai con trỏ.
Chứng minh đúng: Hai trường hợp loại bỏ là bắt buộc do thứ tự tăng dần. Khi hai phần tử nhỏ nhất hiện tại ghép được, mọi nghiệm tối ưu có thể được biến đổi để ghép chúng với nhau mà không giảm số cặp: thay đối tác muộn hơn bằng phần tử nhỏ hơn chỉ làm điều kiện chênh lệch dễ thỏa hơn. Quy nạp trên số phần tử còn lại cho kết quả tối ưu.
Độ phức tạp:O(n log n + m log m) thời gian và O(n+m) bộ nhớ lưu dữ liệu.