Cod sursa(job #886676)

Utilizator robert.onesimRobert Onesim robert.onesim Data 23 februarie 2013 09:45:53
Problema Subsir crescator maximal Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 0.95 kb
#include <fstream>
#define NMAX 100001
using namespace std;
ifstream fin("scmax.in");
ofstream fout("scmax.out");
void cauta(int prim,int ultim);
int n,i,mijl,bst[NMAX],a[NMAX],poz[NMAX],p,u,v[NMAX];
int main()
{
    int lg=1;
    fin>>n;
    for(i=1;i<=n;i++) fin>>a[i];
    bst[1]=a[1];poz[1]=lg;
    for(i=2;i<=n;i++)
    {
        cauta(1,lg);
        if(p>lg)
        {
             bst[++lg]=a[i];
             poz[i]=lg;
        }
        else
        {
            bst[mijl]=a[i];
            poz[i]=mijl;
        }
   }
   fout<<lg<<"\n";
   int k=0;
    for(i=n;i>0 && lg!=0;)
    {
        while(poz[i]!=lg) i--;
        v[++k]=a[i];
        lg--;
    }
    for(i=k;i>=1;i--)
        fout<<v[i]<<" ";
}
void cauta(int prim,int ultim)
{
    p=prim;u=ultim;
    while(p<=u)
    {
        mijl=(p+u)/2;
        if(bst[mijl]<a[i]) p=mijl+1;
        if(bst[mijl]>a[i]) u=mijl-1;
        if(bst[mijl]==a[i]) break;
    }
}