Cod sursa(job #2151285)

Utilizator aturcsaTurcsa Alexandru aturcsa Data 4 martie 2018 12:26:15
Problema Subsir crescator maximal Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.8 kb
#include <fstream>
#include <vector>
using namespace std;
ifstream fi("scmax.in");
ofstream fo("scmax.out");
int A[100001],n,m;
vector <int> V[100001];
int cauta(int val)
{
    int st=0,dr=m+1;
    while((dr-st)>1)
    {
        int mid=(st+dr)/2;
        if(V[mid][mid-1]<=val)
            st=mid;
        else dr=mid;
    }
    return dr;
}
int main()
{
    fi>>n;
    for(int i=1; i<=n; i++)
    {
        fi>>A[i];
        int poz=cauta(A[i]);
        V[poz]=V[poz-1];
        V[poz].push_back(A[i]);
        if(poz==m+1)
            m++;

    }
    int r=m;
    for(int j=0; j<m; j++)
    {
        if(V[m][j]==V[m][j+1])
            r--;
    }
    fo<<r<<"\n";
    for(int j=0; j<m; j++)
        if(V[m][j]!=V[m][j+1])
            fo<<V[m][j]<<" ";
    return 0;
}