Cod sursa(job #1967948)

Utilizator AlexTheDagonBogdan Tudor AlexTheDagon Data 17 aprilie 2017 12:47:29
Problema Subsir crescator maximal Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 1.04 kb
#include <iostream>
#include <fstream>
#define NM 100005
using namespace std;
ifstream in("scmax.in");
ofstream out("scmax.out");
int n,s[NM],a[NM],best[NM],pre[NM],poz,nr,k,maxx,lng;
void afis(int x)
{
    if(pre[x]>0)afis(pre[x]);
    out<<a[x]<<" ";
}
int caut(int x)
{
    int dr=nr,st=0,mid;
    while(dr-st>0)
    {
        mid=(dr+st)/2;
        if(a[s[mid]]<x && a[s[mid+1]]>=x)return mid;
        else
        {
            if(a[s[mid+1]]<x)st=mid+1;
            else dr=mid-1;
        }
    }
    return nr;
}
int main()
{
    in>>n;
    for(int i=1;i<=n;++i)in>>a[i];
    nr=1;
    best[1]=s[1]=1;
    for(int i=2;i<=n;++i)
    {
        lng=caut(a[i]);
        pre[i]=s[lng];
        best[i]=lng+1;
        s[lng+1]=i;
        if(nr<=lng)++nr;
    }
    for(int i=1;i<=n;++i)
    {
        if(best[i]>maxx)
        {
            maxx=best[i];
            poz=i;
        }
    }
    out<<maxx<<'\n';
    afis(poz);
    return 0;
}
///s[i]---cel mai mic nr cu care se termina un sir de lungime i