Cod sursa(job #2158140)

Utilizator RazvanV227Virjoghe Razvan RazvanV227 Data 10 martie 2018 10:54:41
Problema Subsir crescator maximal Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 1.11 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 i,x=k+1;
    i=ind[k];
    int j=1;
    do
    {
        last[j]=t[ind[x]];
        j++;
        x--;
    }while(x);
    for(i =k; i>1; i--)
        g<<a[last[i]]<<' ';
    g<<a[ind[k]];
    return 0;
}