Cod sursa(job #3038411)

Utilizator DomnulMilandruMilandru Nicon-David DomnulMilandru Data 27 martie 2023 12:48:09
Problema Subsir crescator maximal Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.02 kb

#include <fstream>

using namespace std;
ifstream cin("scmax.in");
ofstream cout("scmax.out");
int n,x;
int k;
int a[100001];
int p[100001];
int f[100001];
int cautbin(int val)
{
    int st=0,dr=k-1;
    while(st<=dr)
    {
        int mij=st+(dr-st)/2;
        if(a[mij]==val)
           return mij;
         else
           if(a[mij]<val)
             st=mij+1;
          else
             dr=mij-1;
    }
    return st;
}
void reconstruct(int j,int l)
{
    if(l==-1)
    return;
    for(int i=j;i>=0;i--)
      if(p[i]==l)
        {
            reconstruct(i-1,l-1);
            cout<<f[i]<<" ";
            return;
        }

}
int main()
{
    cin>>n;
    cin>>a[k++];
    f[0]=a[k-1];
    for(int i=1;i<n;i++)
    {
        cin>>x;
        f[i]=x;
        if(x>a[k-1])
        {
          a[k++]=x;
          p[i]=k-1;
        }
        else
        {
          p[i]=cautbin(x);
          a[p[i]]=x;
        }
    }
    cout<<k<<'\n';
    reconstruct(n-1,k-1);
    return 0;
}