Cod sursa(job #1864385)

Utilizator david.sachelarieDavid Sachelarie david.sachelarie Data 31 ianuarie 2017 18:52:50
Problema Subsir crescator maximal Scor 70
Compilator c Status done
Runda Arhiva educationala Marime 1.21 kb
#include <stdio.h>
#include <stdlib.h>
int v[100000],lung[100000],numeros[100000];
FILE*fin,*fout;
int k;
void computeShit(int poz){
    int i;
    for(i=0;i<poz;i++)
        if(v[i]<v[poz] && lung[i]+1>lung[poz])
            lung[poz]=lung[i]+1;
}
void recursiveShit(int nr,int n,int val,int poz){
    int i;
    if(nr>=1){
        for(i=0;i<poz;i++){
            if(lung[i]==nr && v[i]<val){
                numeros[k]=v[i];
                k++;
                recursiveShit(nr-1,n,v[i],i);
                break;
            }
        }
    }
}
void findMax(int* max,int n){
    int i,nr;
    for(i=0;i<n;i++){
        if(lung[i]>(*max))
            (*max)=lung[i];
    }
    nr=(*max);
    recursiveShit(nr,n,2000000001,n);
}
int main()
{
    int n,i,max=-1;
    fin = fopen("scmax.in" ,"r");
    fout = fopen("scmax.out" ,"w");
    fscanf(fin, "%d" ,&n);
    for(i=0;i<n;i++){
        fscanf(fin, "%d" ,&v[i]);
        lung[i]=1;
        computeShit(i);
    }
    findMax(&max,n);
    fprintf(fout, "%d\n" ,max);
    k--;
    while(k>=0){
        fprintf(fout, "%d " ,numeros[k]);
        k--;
    }
    fprintf(fout, "\n");
    fclose(fin);
    fclose(fout);
    return 0;
}