// най-дълга растяща подредица на масив за O(n*log n) #include using namespace std; const int n = 10; int parent[n]; int memo[n + 1]; int num = 0; int a[n] = { 5, 3, -1, 2, 6, 17, 4, 8, 9, -2 }; void show_seq(int k, int i) { if (i != -1){ show_seq(parent[k], i - 1); cout << a[k]<<" "; } } int main() { int l, r, mid; for (int i = 0; i < n; i++) { l = 1; r = num; while (l <= r) { mid = ceil((l + r) / 2); if (a[memo[mid]] < a[i]) l = mid + 1; else r = mid - 1; } parent[i] = memo[l - 1]; memo[l] = i; if (l > num) num = l; } cout << num << endl; show_seq(memo[num], num-1); cout << endl; return 0; }