Cod sursa(job #2351879)

Utilizator Teodor112Teodor Teodor112 Data 22 februarie 2019 19:40:02
Problema Subsir crescator maximal Scor 90
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.86 kb
#include <iostream>
#include <fstream>
#define NMAX 100001
using namespace std;
ifstream fin("scmax.in");
ofstream fout("scmax.out");
int a[NMAX],sol[NMAX],C[NMAX],lgc,poz[NMAX],n;
int cb(int x);
int main()
{
    int p,i,pz;
    fin>>n;
    for(i=1;i<=n;++i)
        fin>>a[i];
    C[++lgc]=a[1];
    poz[1]=1;
    for(i=2;i<=n;++i)
    {
        if(a[i]>C[lgc]) C[++lgc]=a[i],poz[i]=lgc;
        else
        {
            pz=cb(a[i]);

            C[pz]=a[i];
            poz[i]=pz;
        }
    }
    fout<<lgc<<"\n";
    p=0;
    for(i=n;i>=1;i--)
    {
        if(poz[i]==lgc) sol[++p]=a[i],lgc--;
    }
    for(i=p;i>=1;--i)
        fout<<sol[i]<<" ";
    return 0;
}
int cb(int x)
{
    int st=0,dr=lgc+1,m;
    while(dr>st+1)
    {
        m=(st+dr)/2;
        if(C[m]>x) dr=m;
        else st=m;
    }
    return dr;
}