Cod sursa(job #873682)

Utilizator eucosminulFilip Cosmin Ionut eucosminul Data 7 februarie 2013 15:50:13
Problema Subsir crescator maximal Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.96 kb
#include <fstream>
using namespace std;
ifstream f("scmax.in");
ofstream g("scmax.out");
int l[100002], i, j, v[100002], a[100002],k,maxim,p,n,imax, x[100003];
int poz(int p, int u,int a)
{
    int mij=p+(u-p)/2;
    if(p<=u)
    {
        if(a==v[mij])
        return mij;
        if(a<v[mij])
        return poz(p, mij-1,a);
        if(a>v[mij])
        return poz(mij+1,u,a);
    }
    else
    return p;
}

int main()
{
    f>>n;
    for(i=1;i<=n;i++)
    f>>a[i];
    for(i=1;i<=n;i++)
    {
        p=poz(1,k,a[i]);
        v[p]=a[i];
        if (p>k)
        k=p;
        l[i]=p;
        if(k>maxim)
        {
            maxim=p;
            imax=i;

        }
    }
    g<<maxim<<'\n';
    j=1;
    for(i=imax;i>=1;i--)
    {
        if(l[i]==maxim && a[i]<=a[imax])
        {
            x[j]=a[i];
            j++;
            maxim--;
        }
    }
    for(i=j-1;i>=1;i--)
    g<<x[i]<<' ';
    return 0;

}