Cod sursa(job #2037863)

Utilizator Tudor_CandeaCandea Tudor Tudor_Candea Data 12 octombrie 2017 21:29:20
Problema Subsir crescator maximal Scor 45
Compilator cpp Status done
Runda Arhiva educationala Marime 1.5 kb
#include <fstream>

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

struct co
{
   int  nr, l, poz;
}z[100000];
int main()
{
    int n, maxi=0, maxi2=0, dep, dep2;
    fin>>n;
    for(int i=1;i<=n;i++)
    {
        fin>>z[i].nr;
        z[i].l=1;
        maxi=0;
        if(i>=2)
        {
            int m=i-1;
            do
            {
                if(z[i].nr>z[m].nr)
                {
                    int a=1, b=z[m].l;
                    if(maxi<=(a+b))
                    {
                        maxi=a+b;
                        z[i].l=z[m].l+1;
                        z[i].poz=m;
                        dep2=z[m].poz;
                    }
                }
                if(z[i].nr<z[m].nr)
                {
                    if(z[i].poz==0)
                    z[i].poz=i;
                }
                if(dep2==m)
                    dep2=z[m].poz;
                m--;
            }while(m>=1);
            if(maxi2<maxi)
            {
                maxi2=maxi;
                dep=i;
            }
        }
        else
        {
            z[i].l=1;
            z[i].poz=1;
        }
    }
    fout<<maxi2<<'\n';
    int pozcu=dep2, ct=0;
    fout<<z[dep2].nr<<' ';
    for(int i=dep2+1;i<=n;i++)
    {
        if(pozcu==z[i].poz)
        {
            pozcu=i;
            fout<<z[i].nr<<' ';
            ct++;
        }
        if(ct==maxi2)
            break;
    }
    return 0;
}