Cod sursa(job #2448287)

Utilizator AvramDanielAvram Daniel AvramDaniel Data 16 august 2019 15:01:01
Problema Subsir crescator maximal Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.01 kb
#include <bits/stdc++.h>
using namespace std;
#define N 100010

int n,a[N],lis[N],pred[N], lmax;
ofstream out("scmax.out");
void scrie(int x){
    if(pred[x] == 0){
        out<<a[x]<<' ';
        return;
    }
    scrie(pred[x]);
    out<<a[x]<<' ';
    return;
}

int main()
{
    ifstream cin("scmax.in");


    cin>>n;
    for(int i=1;i<=n;i++)
    {
        cin>>a[i];
        if(a[i]>a[lis[lmax]])
        {
            lmax++;
            lis[lmax] = i;
            pred[i]  =lis[lmax-1];
        }
        else if(a[i]<a[lis[1]]){
            lis[1] = i;
            pred[i] = 0;
        }
        else{
            int st = 0, dr = lmax, mid;
            while(dr - st > 1)
            {
                mid = (st + dr)/2;
                if(a[i] <= a[lis[mid]])
                    dr = mid;
                else st = mid;
            }
            lis[dr] = i;
            pred[i] = lis[st];
        }

    }
    out<<lmax<<'\n';

    scrie(lis[lmax]);


    return 0;
}