Cod sursa(job #1429365)

Utilizator dragos_vecerdeaVecerdea Dragos dragos_vecerdea Data 6 mai 2015 10:32:18
Problema Subsir crescator maximal Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.9 kb
#include <stdio.h>

using namespace std;
FILE *fin=fopen("scmax.in" ,"r");
FILE *fout=fopen("scmax.out" ,"w");
int  v[100001] , a[100001] ,mic[100001]  ,pred[100001] ,nr;
int cb(int y)
{
    int pas=1<<16;
    int j=0;
    while(pas != 0)
    {
        if(j+pas <= nr && v[mic[j+pas]]<y) j+=pas;
        pas/=2;
    }
    return j;
}
int main()
{
    int x ,n ,i ,j;
    fscanf(fin ,"%d" ,&n);
    for(i=1;i<=n;i++)
    {
        fscanf(fin ,"%d" , &v[i]);
    }
    nr=0;
    mic[++nr]=1;
    for(i=2;i<=n;i++)
    {
        j=cb(v[i]);
        pred[i]=mic[j];
        mic[j+1]=i;
        if(j==nr) nr++;
    }
    a[1]=v[mic[nr]];
    x=mic[nr];
    int poz=1;
    while(pred[x]!=0)
    {
        poz++;
        a[poz]=v[pred[x]];
        x=pred[x];
    }
    fprintf(fout ,"%d\n" ,nr);
    for(i=nr;i>=1;i--)
    {
        fprintf(fout ,"%d " ,a[i]);
    }
    return 0;
}