Cod sursa(job #2158188)

Utilizator RazvanV227Virjoghe Razvan RazvanV227 Data 10 martie 2018 11:11:30
Problema Subsir crescator maximal Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 1.12 kb
#include <iostream>
#include <fstream>


using namespace std;

ifstream f("scmax.in");
ofstream g("scmax.out");

int n,last[100005],a[100005],ind[100005],k=1,t[100005];

int main()
{
    f>>n;
    for(int i=1; i<=n; i++)
        f>>a[i];
    last[k]=a[1];
    ind[k]=1;
    t[1]=0;
    for(int i=2; i<=n; i++)
    {
        int st=1,dr=k,mij;
        if(a[i]>last[k])
        {
            k++;
            last[k]=a[i];
            ind[k]=i;
            t[i]=ind[k-1];
        }
        else
        {
            while(st<=dr)
            {
                mij= (st+dr) /2;
                if(a[i]>last[mij])
                    st=mij+1;
                else if(a[i]<last[mij])
                    dr=mij-1;
                else break;
            }
            last[mij]=a[i];
            ind[mij]=i;
            t[i]=ind[mij-1];
        }
    }
    g<<k<<'\n';
    int poz=1,b[100005];
    b[poz]=ind[k];
    poz++;
    k--;
    while(k)
    {
        b[poz]=t[b[poz-1]];
        poz++;
        k--;
    }
    for(int i=poz; i>1; i--)
        g<<a[b[i-1]]<<' ';
    return 0;
}