Cod sursa(job #826985)

Utilizator ard_procesoareLupicu ard_procesoare Data 1 decembrie 2012 15:04:39
Problema Subsir crescator maximal Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.95 kb
#include <fstream>
using namespace std;
#define NMAX 100003
long long n, v[NMAX], maxim, k, d[NMAX],c[NMAX], nr;


void caut(int x,int i)
{
    int p, u, m;
    d[i]=1;
    p = 0; u = nr; m = (p+u)/2;
    while (p <= u)
    {
    if (c[m] < x &&  c[m+1] >= x)
    {
        c[m+1]=x;
        d[i]=m+1;
        return;
    }
    else if (c[m+1] < x) {p = m + 1; m = (p + u)/2;}
    else {u = m - 1; m = (p + u)/2;}
    }
    c[++nr]=x;
    d[i]=nr;
}

int main()
{
    ifstream fin("scmax.in");
    ofstream fout("scmax.out");
    int i,poz,j;
    fin>>n;
    n++;
    nr=1;
    for(i=1;i<n;i++) fin>>v[i];
    c[1]=v[1];d[1]=1;
    for(i=2;i<n;i++)
        caut(v[i],i);
    fout<<nr<<endl;
    poz=1;j=nr;
    for(i=n-1;i;i--)
    {
        if(d[i]==nr)
        {
            c[poz++]=v[i];
           // fout<<v[i]<<" ";
            nr--;
        }
    }
    nr=j;
    for(i=nr;i;i--)
        fout<<c[i]<<" ";

}