Cod sursa(job #1892921)

Utilizator radu.damianDamian Radu radu.damian Data 25 februarie 2017 13:16:10
Problema Subsir crescator maximal Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.82 kb
#include <fstream>

using namespace std;
ifstream fin("scmax.in");
ofstream fout("scmax.out");
int n,i,a[100005],lgmax[100005];
void calcul()
{
    int k,i,maxi=1,ind=0,maxi1,p,u,mijl;
    lgmax[n]=1;
    for(k=n-1;k>=1;k--)
    {
        lgmax[k]=1;
        p=k+1; u=n;
        while(p<=u)
        {
            mijl=(p+u)/2;
            if(a[mijl]>a[k])
               lgmax[k]=max(lgmax[k],lgmax[mijl]+1);
            p=mijl+1;
        }
        if(lgmax[k]>maxi)
           {
            maxi=lgmax[k];
            ind=k;
           }



    }
    maxi1=maxi;
    fout<<maxi<<'\n';
    i=ind;
    for(i=ind;i<=n && maxi1;i++)
        if(lgmax[i]==maxi1)
        fout<<a[i]<<' ',maxi1--;
}
int main()
{
    fin>>n;
    for(i=1;i<=n;i++)
        fin>>a[i];

    calcul();
    return 0;
}