Cod sursa(job #2355094)

Utilizator musalaulMusu Miprian musalaul Data 25 februarie 2019 20:15:31
Problema Subsir crescator maximal Scor 60
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.05 kb
#include <bits/stdc++.h>
using namespace std;

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

inline bool compare(const int & a, const int & b)
{
    return a < b;
}

const int MX = 100000 + 50;

int n, v[MX], sz;
vector <int> aux, pos, rasp;



int main()
{
    fin >> n;
    for(int i=1; i<=n; ++i)
        fin >> v[i];

    aux.push_back(v[1]);
    pos.push_back(1);

    for(int i=2;i<=n;++i)
        if(v[i]>aux.back())
        {
            aux.push_back(v[i]);
            pos.push_back(i);
        }
        else
        {
            vector <int>::iterator p=lower_bound(aux.begin(),aux.end(),v[i],compare);
            *p=v[i];
            int k=p-aux.begin()+1;
            pos.push_back(k);
        }

    sz=aux.size();

    fout<<sz<<"\n";
    int sz=aux.size();

    for(int i=pos.size()-1;i>=0&&sz>0;--i)
        if(pos[i]==sz)
        {
            rasp.push_back(v[pos[i]]);
            --sz;
        }

    for(int i=rasp.size()-1;i>=0;--i)
        fout<<rasp[i]<<" ";

    return 0;
}