Cod sursa(job #2163857)

Utilizator Cojocaru_Andrei_CristianCojocaru Andrei Cristian Cojocaru_Andrei_Cristian Data 12 martie 2018 20:15:07
Problema Subsir crescator maximal Scor 55
Compilator cpp Status done
Runda Arhiva educationala Marime 1.07 kb
#include <fstream>

using namespace std;
int v[100005],l[100005],d[100005];
int main()
{   ifstream cin("scmax.in");
    ofstream cout("scmax.out");
    int n,ma=-1,c,poz;
    cin>>n;
    for(int i=1;i<=n;i++)
    {
        cin>>v[i];
    }
    d[1]=1;
    l[1]=v[1];
    int len=1;
    for(int i=2;i<=n;i++)
    {
        int st=1;
        int dr=len;
        poz = len + 1;
        while(st <= dr)
        {
            c = (st+dr)/2;
            if(l[c] <= v[i])
                st = c + 1;
            else
            {
                poz = c;
                dr = c -1;
            }
        }
        if(l[len] == v[i])
            d[i] = len;
        else
        {
            d[i] = poz;
            if(poz > len)
            {
                l[poz] = v[i];
                len = poz;
            }
            else
                l[poz] = v[i];
        }
    }
    for(int i=1;i<=n;i++)
    {
        if(d[i]>ma)
          ma=d[i];
    }
    cout<<ma<<endl;
    for(int i=1;i<=len;i++)
    cout<<l[i]<<" ";
    return 0;
}