Cod sursa(job #2354994)

Utilizator casuneanu.stefanstefan casuneanu casuneanu.stefan Data 25 februarie 2019 18:58:31
Problema Subsir crescator maximal Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.38 kb
#include <fstream>

using namespace std;
ifstream fin ("scmax.in");
ofstream fout ("scmax.out");
int n, i, mxi, poz[100010], C[100010], a[100010], maxi, mx, j, nr, x, st, dr, mj, pz, k, px;
int main()
{
    fin>>n;
    fin>>x;
    poz[1]=1;
    C[1]=x;
    a[1]=x;
    for (i=2; i<=n; i++)
    {
        fin>>x;
        a[i]=x;
        if (x>C[k])
        {
            k++;
            C[k]=x;
            poz[i]=k;
        }
        else
        {
            st=1; dr=k;
            while (st<dr)
            {
                mj=(st+dr)/2;
                if (C[mj]==x)
                {
                    pz=mj;
                    break;
                }
                else
                    if (C[mj]<x)
                        dr=mj-1;
                    else
                        st=mj+1;
            }
            pz=st;
            while (C[pz]==x)
                pz++;
            C[pz]=x;
            poz[i]=pz;
        }
    }
    for (i=n; i>=1; i--)
        if (poz[i]>mx)
        {
            mx=poz[i];
            px=i;
        }
    fout<<mx<<'\n';
    mxi=mx;
    C[1]=a[px];
    j=1;
    j++;
    for (i=px-1; i>=1; i--)
    {
        if (poz[i]==mx-1)
        {
            C[j]=a[i];
            j++;
            mx--;
        }
    }
    for (j=mxi; j>=1; j--)
        fout<<C[j]<<' ';
    return 0;
}