Cod sursa(job #1335074)

Utilizator CiurezAndreiCiurez Marius-Andrei CiurezAndrei Data 4 februarie 2015 22:17:58
Problema Subsir crescator maximal Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.01 kb
#include <fstream>

using namespace std;
ifstream fin("scmax.in");
ofstream fout("scmax.out");

int i, k, n, A[100010], st, dr, mid, T[100010],D[100010];

void drum(int x)
{
    if(x != 0){
        drum(T[x]);
        fout << A[x] << ' ';
    }
}
int main()
{
    fin >> n;
    for(i = 1; i <= n; i ++)
        fin >> A[i];
    D[1] = 1;
    k = 1;
    for(i = 2; i <= n; i ++){
        st = 1; dr = k;
        while(st <= dr){
            mid = (st + dr) / 2;
            if(A[D[mid]] >= A[i])
                dr = mid - 1;
            else
                st = mid + 1;
            if(st > k)
            {
                k ++;
                D[k] = i;
                T[i] = D[k - 1];
            }
            else
                {
                if(A[D[st]] > A[i])
                    {
                        D[st] = i;
                        T[i] = D[st - 1];
                    }
                }
        }
    }
    fout << k << '\n';
    drum(D[k]);
    return 0;
}