Cod sursa(job #2639738)

Utilizator Vasile_AndreiVasile Andrei Calin Vasile_Andrei Data 3 august 2020 17:08:32
Problema Subsir crescator maximal Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.05 kb
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin("scmax.in");
ofstream fout("scmax.out");
int n,i,v[100001],c[100001],a[100001],t,st,dr,poz,mij,b[10001],k;
int main()
{
    fin>>n;
    for (i=1;i<=n;i++)
    {
       fin>>v[i];
    }
    a[1]=v[1];
    t=1;
    c[1]=1;
    for (i=2;i<=n;i++)
    {
        //plasez elementul v[i] in a astpef incat sirul a este crescator
        if (v[i]>a[t]) {a[++t]=v[i];
                        c[i]=t;}
        else {
            //caut binar pozitia
            st=1;
            dr=t;
            poz=0;
            while (st<=dr)
            {
                mij=(st+dr)/2;
                if (a[mij]>=v[i]) {poz=mij;
                                  dr=mij-1;}
                else {st=mij+1;}
            }
            a[poz]=v[i];
            c[i]=poz;
        }
    }
    fout<<t<<'\n';
    k=0;
    for (i=n;i>=1;i--)
    {
      if (c[i]==t) {b[++k]=v[i];t--;}
    if (t==0) break;
    }
    for (i=k;i>0;i--)
        fout<<b[i]<<" ";
    return 0;
}