Cod sursa(job #2984865)

Utilizator razvanalexrotaruRazvan Alexandru Rotaru razvanalexrotaru Data 25 februarie 2023 00:59:12
Problema Subsir crescator maximal Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.03 kb
#include <bits/stdc++.h>
#include <fstream>
#define cin fin
#define cout fout
using namespace std;
ifstream cin ("scmax.in");
ofstream cout ("scmax.out");
int i,n,x,cnt,poz;
struct element
{
    int ind,val;
};
element v[100008];
int sir[100008],tata[100008],aux,ras[100008],cnt2;
int caut_bin(int val)
{
    int st=0,dr=cnt+1,mij;
    while(dr-st>1)
    {
        mij=(st+dr)/2;
        if(val<=v[mij].val)
        {
            dr=mij;
        }
        else
            st=mij;
    }
    return dr;
}
int main()
{
    cin>>n;
    cin>>sir[1];
    cnt=1;
    v[1].val=sir[1];
    v[1].ind=1;
    for(i=2; i<=n; i++)
    {
        cin>>sir[i];
        poz=caut_bin(sir[i]);
        if(poz>=cnt+1)
            cnt++;
        v[poz].val=sir[i];
        v[poz].ind=i;
        tata[i]=v[poz-1].ind;
    }
    cout<<cnt<<'\n';
    aux=v[cnt].ind;
    while(aux!=0)
    {
        ras[++cnt2]=sir[aux];
        aux=tata[aux];
    }
    for(i=cnt2;i>=1;i--)
        cout<<ras[i]<<" ";
    return 0;
}