Cod sursa(job #2010510)

Utilizator lupulescu2001Lupulescu Vlad lupulescu2001 Data 13 august 2017 13:41:50
Problema Subsir crescator maximal Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.36 kb
#include<fstream>
using namespace std;
ifstream fin("scmax.in");
ofstream fout("scmax.out");
int previous[100005],k=1,final1[100005],a[100005];
pair <int,int> dinamica[100005];
int cautbin(int nr)
{
    int left=0,mid,right=k-1,sol=-1;
    while(left<=right)
    {
        mid=(left+right)/2;
        if(nr>dinamica[mid].first)
        {
            sol=mid;
            left=mid+1;
        }
        else if(nr<dinamica[mid].first)
            right=mid-1;
    }
    return sol;
}
int main()
{
    int i,n,x,f=1,r,j;
    fin>>n;
    for(i=1; i<=n; i++)
    {
        fin>>x;
        a[i]=x;
        if(x>dinamica[k-1].first)
        {
            previous[i]=dinamica[k-1].second;
            dinamica[k].first=x;
            dinamica[k].second=i;
            k++;
        }
        else
        {
            r=-1;
            for(j=0;j<k-1;j++)
                if(x>dinamica[j].first && x<dinamica[j+1].first)
                r=j;
            if(r!=-1)
            {
                dinamica[r+1].first=x;
                dinamica[r+1].second=i;
                previous[i]=dinamica[r].second;
            }
        }
    }
    fout<<k-1<<'\n';
    j=0;
    f=dinamica[k-1].second;
while(f!=0)
    {
        final1[j]=a[f];
        j++;
        f=previous[f];
    }
    for(i=j-1;i>=0;i--)
        fout<<final1[i]<<" ";
}