Cod sursa(job #1378598)

Utilizator robertstrecheStreche Robert robertstreche Data 6 martie 2015 13:09:09
Problema Subsir crescator maximal Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.89 kb
#include <fstream>

#define lmax 100005

using namespace std;

ifstream f("scmax.in");
ofstream g("scmax.out");

int n,p;

int a[lmax],sol[lmax],prec[lmax];

int search(int x)
{
    int st=1;
    int dr=p;

    while (st<dr)
     {
         int m=(st+dr)/2;

         if (a[sol[m]]>=x)
          dr=m;
         else
           st=m+1;
     }

    return st;
}

void write(int po)
{
    if (prec[po])
     write(prec[po]);

   g<<a[po]<<" ";

}

int main()
{
   f>>n;

   for (int i=1;i<=n;i++)
    {
        f>>a[i];

        if (a[i]>a[sol[p]])
         {
             p++;
             sol[p]=i;
             prec[i]=sol[p-1];
         }
        else
         {
             int poz=search(a[i]);
             sol[poz]=i;
             prec[i]=sol[poz-1];
         }
    }

    g<<p<<'\n';

    write(sol[p]);

   f.close();
   g.close();

}