Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- void nhap(int n, int A[]);
- void xuat(int n, int A[]);
- int xuLy(int n, int A[], int L[], int cacVTLonHon[], int mangKQ[]);
- int timVTLonHonMax(int cacVTLonHon[], int k);
- int truyMangTangDan(int n, int A[], int L[], int mangKQ[]);
- int timVTMaxCuaMang(int k, int L[]);
- int main()
- {
- int n;
- printf("Nhap so luong phan tu cua mang !\n");
- scanf("%d", &n);
- int* A = new int[n + 2];
- int* L = new int[n + 2];
- int* cacVTLonHon = new int[n + 2];
- int* mangKQ = new int[n];
- nhap(n, A);
- int doDaiMangTangDan = xuLy(n, A, L, cacVTLonHon, mangKQ);
- xuat(doDaiMangTangDan, mangKQ);
- delete[]A;
- delete[]L;
- delete[] cacVTLonHon;
- delete[] mangKQ;
- return 0;
- }
- int timVTMaxCuaMangL(int k, int L[])
- {
- int VT = 0;
- for (int i = 0; i < k; i++)
- {
- if (L[i] > L[VT])
- {
- VT = i;
- }
- }
- return VT;
- }
- int truyMangTangDan(int n, int A[], int L[], int mangKQ[])
- {
- int dem = 0;
- int VT = timVTMaxCuaMangL(n + 2, L);
- int i = VT;
- int j;
- do
- {
- for (j = i; j < n + 1; j++)
- {
- if (L[i] == (L[j] + 1) && (A[i] <= A[j]))
- {
- mangKQ[dem++] = A[j];
- break;
- }
- }
- i = j;
- } while (i != n + 1);
- return dem;
- }
- int xuLy(int n, int A[], int L[], int cacVTLonHon[], int mangKQ[])
- {
- L[n + 1] = 1;
- L[n] = 2;
- int k = 0;
- for (int i = n - 1; i >= 0; i--)
- {
- for (int j = i+1; j < n + 2; j++)
- {
- if (A[i] <= A[j])
- {
- cacVTLonHon[k++]=L[j];
- }
- }
- int VT = timVTLonHonMax(cacVTLonHon, k);
- L[i] = VT + 1;
- k = 0;
- }
- return truyMangTangDan(n, A, L, mangKQ);
- }
- int timVTLonHonMax(int cacVTLonHon[], int k)
- {
- int max = cacVTLonHon[0];
- for (int i = 0; i < k; i++)
- {
- if (max < cacVTLonHon[i])
- {
- max = cacVTLonHon[i];
- }
- }
- return max;
- }
- void nhap(int n, int A[])
- {
- A[0] = -100000000;
- A[n + 1] = 100000000;
- for (int i = 1; i <= n; i++)
- {
- scanf("%d", &A[i]);
- }
- }
- void xuat(int n, int A[])
- {
- printf("Do dai cua mang tang dan dai nhat la : %d\n", n);
- for (int i = 0; i < n; i++)
- {
- printf("%d ", A[i]);
- }
- printf ("\n");
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement