Cod sursa(job #1915062)

Utilizator Alex.PAlexandru Pacurar Alex.P Data 8 martie 2017 19:32:44
Problema Subsir crescator maximal Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.05 kb
#include <stdio.h>
#include <stdlib.h>

using namespace std;

int   v[100001];
int aux[100001];
int poz[100001];
int sol[100001];

int main()
{
    FILE *fin, *fout;
    int n,i,k,st,dr,mij;
    fin=fopen("scmax.in","r");
    fout=fopen("scmax.out","w");
    fscanf(fin,"%d",&n);
    k=0;
    for(i=1;i<=n;i++){
        fscanf(fin,"%d",&v[i]);
        st=0;
        dr=k;
        while(st<dr){
            mij=(st+dr)/2;
            if(aux[mij]==v[i])
                st=dr=mij;
            else    if(aux[mij]<v[i])
                st=mij+1;
            else
                dr=mij;
        }
        mij=(st+dr)/2;
        if(st==k && v[i]>=aux[k])
            k++;
        aux[mij]=v[i];
        poz[i]=mij;
        printf("%3d | %3d\n",v[i],poz[i]);
    }
    fprintf(fout,"%d\n",k);
    dr=k-1;
    for(i=n;i>0;i--){
        if(poz[i]==dr){
            sol[dr]=i;
            dr--;
        }
    }
    for(i=0;i<k;i++){
        fprintf(fout,"%d ",v[sol[i]]);
    }
    fclose(fin);
    fclose(fout);
    return 0;
}