Cod sursa(job #2723201)

Utilizator dumitrustefaniaDumitru Stefania dumitrustefania Data 13 martie 2021 19:15:35
Problema Subsir crescator maximal Scor 85
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.01 kb
#include <bits/stdc++.h>
#include <cstring>
# define pb push_back
#define nmax 100001
using namespace std;
ifstream in("scmax.in");
ofstream out("scmax.out");
int n,i,a[nmax],d[nmax],poz[nmax],sol[nmax],k,st,dr,mij,pozz,j,kk;
int main()
{
    in>>n;
    for(i=1; i<=n; i++)
        in>>a[i];
    k=1; d[1]=a[1];
    for(i=2; i<=n; i++)
    {
        if(a[i]>d[k])
        {
            d[++k]=a[i];
            poz[i]=k;
        }
        else
        {
            st=1;
            dr=k; pozz=k+1;
            while(st<=dr)
            {
                mij=(st+dr)/2;
                if(d[mij]>a[i])
                    dr=mij-1,pozz=mij;
                else
                    st=mij+1;
            }
            d[pozz]=a[i];
            poz[i]=pozz;
        }

    }
    out<<k<<"\n";
    kk=k;
    j=n;
    while(k)
    {
        while(poz[j]!=k)
            j--;
        sol[k]=j;
        k--;
    }
    for(i=1;i<=kk;i++)
        out<<a[sol[i]]<<" ";
    return 0;
}