Cod sursa(job #3306606)

Utilizator Alexia12345Maftei Alexia Alexia12345 Data 12 august 2025 14:44:19
Problema Subsir crescator maximal Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.05 kb
#include <fstream>
using namespace std;

ifstream fin("scmax.in");
ofstream fout("scmax.out");

int n,v[100005],best[100003], p[100003], maxi, k, l[100003], nr=1,poz;

int caut(int x)
{
    int p=0,u=nr,m=(p+u)/2;
    while(p<=u)
    {
        if(v[l[m]]<x && v[l[m+1]]>=x)
            return m;
        else if(v[l[m+1]]<x)
        {
            p=m+1;
            m=(p+u)/2;
        }
        else
        {
            u=m-1;
            m=(p+u)/2;
        }
    }
    return nr;
}
void afis(int i)
{
   if (p[i] > 0)  afis(p[i]);
   fout<<v[i]<<" ";
}

int main()
{
    fin>>n;
    for(int i=1;i<=n;i++)
        fin>>v[i];
    best[1]=l[1]=1;
    l[0]=0;
    for(int i=2;i<=n;i++)
    {
        poz=caut(v[i]);
        p[i]=l[poz];
        best[i]=poz+1;
        l[poz+1]=i;
        if(nr<=poz)
            nr=poz+1;
    }
    poz = 0;
    for (int i = 1; i <= n; i++)
       if (maxi < best[i])
       {
          maxi = best[i];
          poz = i;
       }
   fout<<maxi<<endl;
   afis(poz);
   return 0;
}