Cod sursa(job #883310)

Utilizator Vally77FMI Calinescu Valentin Gelu Vally77 Data 19 februarie 2013 21:54:34
Problema Subsir crescator maximal Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.79 kb
#include <fstream>
#define NMAX 100005
#define maxim 2000000002
using namespace std;
ifstream ka("scmax.in");
ofstream ki("scmax.out");

int a[NMAX],q[NMAX],p[NMAX],st[NMAX],k,l,n;

int cautare(int st,int dr,int x)
{
    int m=0;
    while(st<dr)
    {
        m=(st+dr)/2;
        if(q[m]>=x)
        dr=m;
        else
        st=m+1;
    }
    return st;
}
int main()
{
    ka>>n;
    for(int i=1;i<=n;i++)
    {ka>>a[i];
    q[i]=maxim;}
    for(int i=1;i<=n;i++)
    {
        k=cautare(1,l+1,a[i]);
        if(q[k]==maxim)
        l++;
        q[k]=a[i];
        p[i]=k;
    }
    ki<<l<<'\n';
    k=0;
    for(int i=n;i>=1;i--)
    {
        if(p[i]==l)
        {
            st[++k]=a[i];
            l--;
        }
        if(!l)
        break;
    }
    for(int i=k;i>=1;i--)
    ki<<st[i]<<" ";

}