Cod sursa(job #2039845)

Utilizator modulopaulModulopaul modulopaul Data 14 octombrie 2017 23:43:50
Problema Subsir crescator maximal Scor 70
Compilator cpp Status done
Runda Arhiva educationala Marime 1.02 kb
#include <iostream>
#include <cstdio>
#define MAXN 100000

using namespace std;
FILE *fin=fopen("scmax.in","r"),*fout=fopen("scmax.out","w");
int n,MAXLS,pf;
struct help{
    int pp,val,ls;
}v[MAXN];
int main(){
    fscanf(fin,"%d",&n);
    fscanf(fin,"%d",&v[0].val);
    v[0].ls=1;
    v[0].pp=-1;
    pf=1;
    MAXLS=1;
    for(int i=1;i<n;i++){
        fscanf(fin,"%d",&v[i].val);
        int maxls=0;
        bool ok=false;
        for(int j=0;j<=i;j++){
            if(v[j].val<v[i].val and v[j].ls>maxls){
                v[i].pp=j;
                v[i].ls=v[j].ls+1;
                maxls=v[j].ls;
                ok=true;
            }
        }
        if(ok==false){
            v[i].pp=-1;
            v[i].ls=1;
        }
        if(v[i].ls>MAXLS){
            pf=i;
            MAXLS=v[i].ls;
        }
    }
    int rez[MAXN];
    for(int i=MAXLS,j=pf;i>=1;i--){
        rez[i]=v[j].val;
        j=v[j].pp;
    }
    fprintf(fout,"%d\n",MAXLS);
    for(int i=1;i<=MAXLS;i++){
        fprintf(fout,"%d ",rez[i]);
    }
    return 0;
}