B1: Code phần nhập xuất
B2: Code tìm đoạn con tăng dần lớn nhất Lứu ý phải code tìm đoạn con lớn nhất với O(nlogn) bằng cách tìm kiếm nhị phân. Mỗi lần tìm kiếm vị trí mà giá trị d trong mảng tìm kiếm nhị phân mà lớn hơn vị trí i ta đang xét thì lưu lại (Giá trị này tương đương với đoạn con lớn nhất mà các giá trị của đoạn con có chỉ số nhỏ hơn nó, chỉ số là số thứ tự của dữ liệu đầu vào). Để được mảng với chỉ số lớn hơn nó thì ta cần phải reverse chỉ số của dữ liệu đầu vào.
B3: Ta làm tư tự tìm đoạn con nhỏ nhất, khi xong ta sẽ được 2 mảng left và right, mảng left[i] là độ dài đoạn con lớn nhất giảm dần mà có chỉ số lớn hơn nó. right[i] là độ dài đoạn con lớn nhất tăng dần mà có chỉ số lớn hơn nó
B4: for 1 -> n để tìm (right[i] + left[i] - 1) lớn nhất
B5: cout kết quả
B2: Code tìm đoạn con tăng dần lớn nhất Lứu ý phải code tìm đoạn con lớn nhất với O(nlogn) bằng cách tìm kiếm nhị phân. Mỗi lần tìm kiếm vị trí mà giá trị d trong mảng tìm kiếm nhị phân mà lớn hơn vị trí i ta đang xét thì lưu lại (Giá trị này tương đương với đoạn con lớn nhất mà các giá trị của đoạn con có chỉ số nhỏ hơn nó, chỉ số là số thứ tự của dữ liệu đầu vào). Để được mảng với chỉ số lớn hơn nó thì ta cần phải reverse chỉ số của dữ liệu đầu vào.
B3: Ta làm tư tự tìm đoạn con nhỏ nhất, khi xong ta sẽ được 2 mảng left và right, mảng left[i] là độ dài đoạn con lớn nhất giảm dần mà có chỉ số lớn hơn nó. right[i] là độ dài đoạn con lớn nhất tăng dần mà có chỉ số lớn hơn nó
B4: for 1 -> n để tìm (right[i] + left[i] - 1) lớn nhất
B5: cout kết quả
Tổng cộng 2 trả lời
tre trou
Like đê =))