Cod sursa(job #1652118)

Utilizator DenisVieriuDenis Vieriu DenisVieriu Data 14 martie 2016 17:53:05
Problema Subsir crescator maximal Scor 70
Compilator cpp Status done
Runda Arhiva educationala Marime 1.82 kb
#include <iostream>
#include <fstream>
using namespace std;
int urmatorul[100001],maxime[100001],nou[100001];
long int a[100001];
int main()
{
    ifstream f("scmax.in");
    ofstream g("scmax.out");
    int i,j,n;
    f>>n;


   /* for(i=0;i<n;i++)
        f>>a[i];



   maxime[n-1]=1;
    urmatorul[n-1]=-1;
    int maxx=0,poz=0;
    for(i=n-2;i>=0;i--)
    {
        maxime[i]=1;
        urmatorul[i]=-1;
        for(j=i+1;j<n;j++)
            if(a[i]<a[j]&&maxime[i]<=maxime[j])
        {
            maxime[i]=maxime[j]+1;
            urmatorul[i]=j;
            if(maxx<maxime[i])
            {
                maxx=maxime[i];
                poz=i;
            }
        }
    }



    g<<maxx<<'\n';
    g<<a[poz]<<" ";
    for(i=1;i<maxx;i++)
    {
        poz=urmatorul[poz];
        g<<a[poz]<<" ";
    }
*/
    maxime[0]=1;
    urmatorul[0]=-1;
    for(i=0;i<n;i++)
    {
        f>>a[i];
        if(i>0)
        {
                maxime[i]=1;
            urmatorul[i]=-1;
            for(j=0;j<i;j++)
                if(a[j]<a[i]&&maxime[i]<=maxime[j])
            {
                maxime[i]=maxime[j]+1;
                urmatorul[i]=j;
            }
        }

    }


    int maxx=0,poz=0;
    for(i=1;i<n;i++)
    {
        maxime[i]=1;
        urmatorul[i]=-1;
        for(j=0;j<i;j++)
            if(a[j]<a[i]&&maxime[i]<=maxime[j])
        {
            maxime[i]=maxime[j]+1;
            urmatorul[i]=j;
            if(maxx<maxime[i])
            {
                maxx=maxime[i];
                poz=i;
            }
        }
    }

    nou[maxx-1]=a[poz];
    for(i=maxx-2;i>=0;i--)
    {
        poz=urmatorul[poz];
        nou[i]=a[poz];
    }

    g<<maxx<<'\n';
    for(i=0;i<maxx;i++)
        g<<nou[i]<<" ";


    return 0;
}