Cod sursa(job #1867438)

Utilizator david.sachelarieDavid Sachelarie david.sachelarie Data 4 februarie 2017 08:40:11
Problema Subsir crescator maximal Scor 70
Compilator c Status done
Runda Arhiva educationala Marime 1.18 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 findMax(int* max,int n){
    int i,nr,poz,val;
    for(i=0;i<n;i++){
        if(lung[i]>(*max))
            (*max)=lung[i];
    }
    nr=(*max);
    poz=n;
    val=2000000001;
    while(nr>0){
        poz--;
        for(i=poz;i>=0;i--){
            if(lung[i]==nr && v[i]<val){
                numeros[k]=v[i];
                k++;
                poz=i;
                val=v[i];
                break;
            }
        }
        nr--;
    }
}
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;
}