II. Lập trình dựa vào kỹ thuật duyệt và đệ qui
1.9. Kỹ thuật qui hoạch động
76
BÀI 2.5.1: XẾP HÀNG
Hàng ngày khi lấy sữa, N con bò của bác John (1 ≤ N ≤ 50000) luôn xếp hàng theo thứ tự không đổi. Một hôm bác John quyết định tổ chức một trò chơi cho một số con bò. Để đơn giản, bác John sẽ chọn ra một đoạn liên tiếp các con bò để tham dự trò chơi. Tuy nhiên để trò chơi diễn ra vui vẻ, các con bò phải không quá chênh lệch về chiều cao.
Bác John đã chuẩn bị một danh sách gồm Q (1 ≤ Q ≤ 200000) đoạn các con bò và chiều cao của chúng (trong phạm vi [1, 1000000]). Với mỗi đoạn, bác John muốn xác định chênh lệch chiều cao giữa con bò thấp nhất và cao nhất. Bạn hãy giúp bác John thực hiện công việc này.
Dữ liệu
Dòng đầu tiên chứa 2 số nguyên N và Q.
Dòng thứ i trong số N dòng sau chứa 1 số nguyên duy nhất, là độ cao của con bò thứ i.
Dòng thứ i trong số Q trong tiếp theo chứa 2 số nguyên A, B (1 ≤ A ≤ B ≤ N), cho biết đoạn các con bò từ A đến B.
Kết quả
Gồm Q dòng, mỗi dòng chứa 1 số nguyên, là chênh lệch chiều cao giữa con bò thấp nhất và cao nhất thuộc đoạn tương ứng.
Ví dụ: Input.txt Output.txt 6 3 1 7 3 4 2 5 1 5 4 6 2 2 6 3 0
77
BÀI 2.5.2: ĐOẠN TĂNG
Cho dãy số nguyên A = (a1, a2, …, an). Hãy tìm một đoạn dài nhất gồm các phần tử liên tiếp trong dãy A có thứ tự không giảm.
Quy ước: Đoạn chỉ gồm đúng 1 phần tử trong A cũng được coi là có thứ tự không giảm.
Dữ liệu:
Dòng 1 chứa số nguyên dương n ≤ 105
Dòng 2 chứa n số nguyên a1, a2, ..., an ("i: |ai| ≤ 109) cách nhau ít nhất một dấu cách
Kết quả:một số nguyên duy nhất là số phần tử trong đoạn tìm được
Ví dụ:
INPUT OUTPUT
11
88 99 11 22 22 33 11 66 33 44 77
4
BÀI 2.5.3: ĐO ̣ ĐO
Hai xâu ký tự được gọi là đảo của nhau nếu ta có thể hoán vị các ký tự của một xâu để được xâu còn lại. Ví dụ: xâu “occurs” là đảo của xâu “succor”, tuy nhiên xâu “dear” không phải là đảo của xâu “dared” (vì chữ ‘d’ xuất hiện 2 lần trong “dared” nhưng chỉ xuất hiện “dear” trong 1 lần).
Độ đo giữa hai xâu ký tự là số ký tự ít nhất cần phải xóa (trên cả hai xâu) để hai xâu còn lại đảo của nhau. Ví dụ độ đo giữa hai xâu “sleep” và “leap” là 3, độ đo giữa hai xâu “dog” và “cat” là 6.
Yêu cầu:
Hãy tính độ đo giữa hai xâu cho trước.
Dữ liệu:
Gồm hai dòng, mỗi dòng chứa một xâu ký tự chỉ gồm các chữ cái tiếng Anh thường, mỗi dòng có không quá 1 triệu ký tự.
78 Ví dụ INPUT OUTPUT Begin end 4
BÀI 2.5.4: DÃY CON TĂNG DA ̀N TỰ NHIÊN BA ̣C K
Cho dãy gồm N số phân biệt AN = {a1, a2, .., aN } và số tự nhiên K (K<=N<=100). Ta gọi một dãy con tăng dần bậc K của dãy số AN là một dãy các số gồm K phần tử trong dãy đó thỏa mãn tính chất tăng dần. Bài toán được đặt ra là hãy tìm số các dãy con tăng dần bậc K của dãy số AN.
Input:
Dòng đầu tiên ghi số bộ test, không lớn hơn 100. Mỗi bộ test được xây dựng theo khuôn dạng sau:
Dòng đầu tiên ghi lại hai số N và K tương ứng với số phần tử của dãy số và bậc của dãy con.
Dòng kế tiếp ghi lại N số của dãy số AN, các số trong dãy không lớn hơn 100.
Output:
Với mỗi bộ test, in ra màn hình số các dãy con tăng dần tự nhiên bậc K của dãy số AN. Ví du ̣: Input: 2 5 3 2 5 15 10 20 5 3 2 20 10 15 5 Output: 7 1
80