Cod sursa(job #1913822)

Utilizator Alex.PAlexandru Pacurar Alex.P Data 8 martie 2017 14:14:03
Problema Subsir crescator maximal Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 0.94 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=mij+1;
            else
                dr=mij-1;
        }
        mij=(st+dr)/2;
        if(st==k && v[i]>=aux[k])
            k++;
        aux[st]=v[i];
        poz[i]=st;
    }
    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;
}