Cod sursa(job #1246823)

Utilizator PlatenitesVoicu Cristian Platenites Data 21 octombrie 2014 18:29:03
Problema Subsir crescator maximal Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.24 kb
#include <fstream>

using namespace std;

ifstream f("scmax.in");
ofstream g("scmax.out");
int v[100001],n,s[100001],L[100001],k=0,poz,i,maxi,pus[100001];
void cautare_binara()
{
   int ls=0,ld=0,mid=0;
    ls=1;ld=k;
    while(ls<=ld)
    {
        mid=(ls+ld)/2;
        if(v[i]<=s[mid])
        {
           // s[mid]=v[i];
            poz=mid;
            ld=mid-1;
        }
        else
            if(v[i]<s[mid])
                ld=mid-1;
            else
                ls=mid+1;
    }
}
int main()
{
    f>>n;
    for(i=1;i<=n;i++)
        f>>v[i];
    for(i=1;i<=n;i++)
    {
        if(v[i]>s[k])
        {
            s[++k]=v[i];
            L[i]=k;
            if(L[i]>maxi)
                maxi=L[i];
        }
        else
        {
            cautare_binara();
           // k=poz;
            s[poz]=v[i];
            L[i]=poz;
            if(L[i]>maxi)
                maxi=L[i];
        }
    }
    g<<maxi<<'\n';
    int inainte=2000000001;
    k=0;
    for(i=n;i>=1;i--)
    {
        if(L[i]==maxi && v[i]<inainte)
        {
            pus[++k]=v[i];
            inainte=v[i];
            maxi--;
        }
    }
    for(i=k;i>=1;i--)
        g<<pus[i]<<" ";
    return 0;
}