Cod sursa(job #2158194)

Utilizator doruliqueDoru MODRISAN dorulique Data 10 martie 2018 11:13:30
Problema Subsir crescator maximal Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.91 kb
#include <iostream>
#include <fstream>
using namespace std;

int a[100001],t[100001],last[100001],ind[100001];

int main()
{
    ifstream fin("scmax.in");
    int n,i,k,st,dr,m;
    fin>>n;
    fin>>a[1];
    t[1]=0;last[k=1]=a[1];ind[1]=1;
    for(i=2;i<=n;i++)
    {
        fin>>a[i];
        if(a[i]>last[k])
        {
            last[++k]=a[i];ind[k]=i;t[i]=ind[k-1];
        }
        else
        {
            st=1;dr=k;m=(st+dr)/2;
            while(st<dr)
            {
                if(a[i]>last[m])st=m+1;
                else dr=m;
                m=(st+dr)/2;
            }
            last[st]=a[i];
            t[i]=ind[st-1];
            ind[st]=i;
        }
    }
    i=ind[k];
    int j=k;
    while(i)
    {
        last[j--]=a[i];
        i=t[i];
    }
    ofstream fout("scmax.out");
    fout<<k<<"\n";
    for(i=1;i<=k;i++)fout<<last[i]<<" ";
    return 0;
}