Cod sursa(job #2274786)

Utilizator GarboteialexGarbotei Alex Garboteialex Data 2 noiembrie 2018 14:58:53
Problema Subsir crescator maximal Scor 90
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.92 kb
#include <fstream>

using namespace std;

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

const int DM = 1e5 + 1e2;

long long n,v[DM];
long long dp[DM],p[DM],l, ind;

int bin(int x, int lo, int hi)
{
    int mid;
    
    while(lo < hi)
    {
        mid = (lo + hi) / 2;
        
        if(v[dp[mid]] <= x) lo = mid + 1;
        else hi = mid;
    }
    
    mid = (lo + hi) / 2;
    if(v[dp[mid]] >= x) mid--;
    
    return mid;
}

void afisare(int i)
{
    if(p[i] > 0) afisare(p[i]);
    fout << v[i] << " ";
}

int main()
{
    fin >> n;
    for(int i = 1; i <= n; i++) fin >> v[i];
    
    dp[0] = 0;
    dp[1] = 1;
    l = 1;
    ind = 1;
    
    for(int i = 2; i <= n; i++)
    {
        int poz = bin(v[i], 0, l);
        dp[poz + 1] = i;
        p[i] = dp[poz];
        
        if(poz + 1 > l)
        {
            l = poz + 1;
            ind = i;
        }
    }
    
    fout << l << '\n';
    afisare(ind);
}