Cod sursa(job #931736)

Utilizator andi12Draghici Andrei andi12 Data 28 martie 2013 14:30:36
Problema Subsir crescator maximal Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.83 kb
#include <iostream>
#include<cstdio>
using namespace std;
int val[100005];
int pred[100005];
int v[100005], dim;
FILE *in,*out;
void scrie(int x)
{
    if(x!=0)
        scrie(pred[x]);
    if(x)
    fprintf(out,"%d ",v[x]);
}
int bin(int x)
{
    int pas=1<<18,i=0;
    while(pas>=1)
    {
        if(i+pas<=dim && v[val[pas+i]]<x)
        {
            i=i+pas;
        }
        pas=pas>>1;
    }
    if (i == dim)
        ++dim;
    return i+1;
}
int main()
{
    in=fopen("scmax.in","r");
    out=fopen("scmax.out","w");
    int n,k,i,j,l;
    fscanf(in,"%d",&n);
    for(i=1;i<=n;i++)
    {
        fscanf(in,"%d",&v[i]);
    }
    for(i=1;i<=n;i++)
    {
        l=bin(v[i]);
        pred[i]=val[l-1];
        val[l]=i;
    }
    fprintf(out,"%d\n",dim);
    scrie(val[dim]);
    return 0;
}