Cod sursa(job #2709594)

Utilizator BaraianTudorBaraian Tudor Stefan BaraianTudor Data 20 februarie 2021 15:05:03
Problema Subsir crescator maximal Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.84 kb
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;
ifstream in("scmax.in");
ofstream out("scmax.out");
int n,a[100005],c[100005],poz;
vector <int> v,sol;
int main()
{
    in>>n;
    v.push_back(0);
    c[0]=-1;
    for(int i=1;i<=n;i++)
    {
        in>>a[i];
        poz=0;
        for(int j=(1<<30);j>0;j=j>>1)
        {
            if(poz+j<v.size())
            {
                if(a[v[poz+j]]<a[i])
                    poz+=j;
            }
        }
        if(poz+1==v.size())v.push_back(i),c[i]=v[poz];
        else  v[poz+1]=i;
        c[i]=v[poz];
    }
    int ind=v[v.size()-1];
    while(c[ind]>=0)
    {
        sol.push_back(a[ind]);
        ind=c[ind];
    }
    out<<sol.size()<<'\n';
    for(int i=sol.size()-1;i>=0;i--)
    {
        out<<sol[i]<<' ';
    }
    return 0;
}