Cod sursa(job #2623993)

Utilizator dandi08Duta Andrei dandi08 Data 4 iunie 2020 12:38:57
Problema Subsir crescator maximal Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.2 kb
#include <iostream>
#include <fstream>
#include <bits/stdc++.h>
using namespace std;
ifstream f("scmax.in");
ofstream g("scmax.out");
long long v1[100001], v2[100001], i, j, x, max1, n, v3[100001], p, u, m, poz, c, vsol[100001];
int main()
{
    f>>n;
    for(i=1;i<=n;i++)
    {
        f>>v1[i];
        v3[i]=9999999999;
    }
    v3[1]=v1[1];
    v2[1]=1;
    max1=2;
    for(i=2;i<=n;i++)
    {
        p=0;
        u=max1;
        while(u-p!=1)
        {
            m=(p+u)/2;
            if(v3[m]>v1[i])
                u=m;
            else
                p=m;
        }
        if(u>=max1)
            max1=u+1;
        if(v3[u]>v1[i] && v3[p]<v1[i])
        {
            v3[u]=v1[i];
            v2[i]=u;
        }
    }
    max1=0;
    for(i=1;i<=n;i++)
    {
        if(v2[i]>max1)
        {
            poz=i;
            max1=v2[i];
        }
    }
    g<<max1<<'\n';
    j=1;
    c=max1;
    vsol[c]=v1[poz];
    c--;
    for(i=poz-1;i>=1;i--)
    {
        if(v2[i]==c && v1[poz]>=v1[i])
        {
            poz=i;
            vsol[c]=v1[i];
            c--;
        }
    }
    for(i=1;i<=max1;i++)
        g<<vsol[i]<<" ";
    return 0;
}