Cod sursa(job #1682816)

Utilizator andra1782Andra Alazaroaie andra1782 Data 10 aprilie 2016 13:06:49
Problema Subsir crescator maximal Scor 100
Compilator c Status done
Runda Arhiva educationala Marime 0.96 kb
#include <stdio.h>
int v[100000],s[100000],p[100000];
int main(){
    FILE *fin=fopen("scmax.in","r");
    FILE *fout=fopen("scmax.out","w");
    int n,i,t,poz,st,dr,mij,j;

    fscanf(fin,"%d",&n);
    fscanf(fin,"%d",&v[0]);
    s[0]=v[0];
    t=1;
    for(i=1; i<n; i++){
        fscanf(fin,"%d",&v[i]);
        poz=mij=-1;
        st=0;
        dr=t-1;
        while(st<=dr){
            mij=(st+dr)/2;
            if(s[mij]>=v[i]){
                poz=mij;
                dr=mij-1;
            }else
                st=mij+1;
        }
        if(poz==-1){
            s[t]=v[i];
            p[i]=t;
            t++;
        }else{
            s[poz]=v[i];
            p[i]=poz;
        }
    }
    fprintf(fout,"%d\n",t);
    j=n-1;
    for(i=t-1; i>=0; i--){
        while(p[j]!=i)
            j--;
        s[i]=v[j];
    }
    for(i=0; i<t; i++)
        fprintf(fout,"%d ",s[i]);
    fclose(fin);
    fclose(fout);
    return 0;
}