Cod sursa(job #1466476)

Utilizator Vlad_lsc2008Lungu Vlad Vlad_lsc2008 Data 29 iulie 2015 12:01:48
Problema Subsir crescator maximal Scor 90
Compilator cpp Status done
Runda Arhiva educationala Marime 0.88 kb
#include <iostream>
#include <fstream>
#define Infinity 2000000001
using namespace std;
ifstream t1("scmax.in");
ofstream t2("scmax.out");
int n,v[100010],q[100010],p[100010],len,maxim;

int place(int x,int st,int dr)
{
    int mid=(st+dr)/2;
    if(st==dr)
    {
        if(st>len) q[++len+1]=Infinity;
        q[st]=x;
        return st;
    }
    else if(x<q[mid]) return place(x,st,mid);
                 else return place(x,mid+1,dr);
}

void construct(int x,int val)
{
    int i;
    for(i=x;i>=1;i--)
    if(p[i]==val)
    {
        construct(i-1,val-1);
        t2<<v[i]<<' ';
        break;
    }
}

int main()
{
    int i,rat;
    t1>>n;
    len=0; q[1]=Infinity;
    for(i=1;i<=n;i++)
    {
        t1>>rat; v[i]=rat;
        p[i]=place(rat,1,len+1);
    }
    t2<<len<<'\n';
    construct(n,len);
    t1.close();
    t2.close();
    return 0;
}