Cod sursa(job #2530036)

Utilizator serafimalex2001Serafim Alex serafimalex2001 Data 24 ianuarie 2020 12:19:53
Problema Subsir crescator maximal Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.92 kb
#include <iostream>
#include <fstream>
using namespace std;

ifstream fin("scmax.in");
ofstream fout("scmax.out");

int a[100005],n,last;
int aux[100005];
int prev[100005];

int cautare(int st, int dr, int val)
{
    if(st>dr)
        return 0;
    int m=(st+dr)/2;
    if(a[aux[m]] < val)
        return max(m,cautare(m+1,dr, val));
    else return cautare( st, m-1, val );
}



void print(int poz)
{
    if(prev[poz]!=0) print(prev[poz]);
    fout<<a[poz]<<" ";
}

int main()
{
    fin>>n;
    int x;
    for(int i=1; i<=n; ++i)
        fin>>a[i];
    for(int i=1; i<=n; ++i)
        if(a[i]>a[aux[last]])
        {
            aux[++last]=i;
            prev[i]=aux[last-1];
        }
        else
        {
            x=cautare(1,last,a[i]);
            aux[x+1]=i;
            prev[i]=aux[x];
        }
    fout<<last<<"\n";

    print(aux[last]);

    //fout<<a[last];
    return 0;
}