Cod sursa(job #2176280)

Utilizator baragan30Baragan Andrei baragan30 Data 16 martie 2018 22:08:54
Problema Subsir crescator maximal Scor 70
Compilator cpp Status done
Runda Arhiva educationala Marime 0.82 kb
#include <fstream>
#include <iostream>
using namespace std;

ifstream f("scmax.in");
ofstream g("scmax.out");
int v[100005],T[100005],L[100005];
int n,t;
void citire()
{
    f>>n;
    for(int i=1;i<=n;i++)f>>v[i];
}
void dinamica()
{
    L[n]=1;
    T[n]=0;
    for(int i=n-1;i>=1;i--)
    {L[i]=1;
    T[i]=0;
    for(int j=i+1;j<=n;j++){
        if(v[i]<v[j]&&L[i]<=L[j]){
            L[i]=L[j]+1;
            T[i]=j;
        }
    }
    }
}
void cauta()
{
    int m1=0,m2;
    for(int i=1;i<=n;i++)
    {
        if(m1<L[i]){
            m1=L[i];
            m2=i;
        }
        if(m1>n-i-m1+1)break;
    }
    t=m2;
}
void afisare(int x){
g<<v[x]<<" ";
if(T[x]!=0)afisare(T[x]);
}
int main()
{
    citire();
    dinamica();
    cauta();
    g<<L[t]<<'\n';
    afisare(t);
}