Cod sursa(job #2150179)

Utilizator aturcsaTurcsa Alexandru aturcsa Data 3 martie 2018 12:29:21
Problema Subsir crescator maximal Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.18 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 V[100001];
int cauta(int val)
{
    int st=0,dr=m+1;
    while((dr-st)>1)
    {
        int mid=(st+dr)/2;
        if(V[mid][0]<=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]);
            if(poz==m+1)
            {
                V[m+1].push_back(A[i]);
                if(m+1!=1)
                for(int i=0;i<=V[m].size();i++)
                    V[m+1].push_back(V[m][i]);
                m++;
            }
            else
            if(poz==0)
            {
                V[1].clear();
                V[1].push_back(A[i]);
            }
            else
            {
                V[poz].clear();
                V[poz].push_back(A[i]);
                if(poz-1>0)
                V[poz]=V[poz-1];
            }
    }
    fo<<m-1<<"\n";
    for(int i=V[m].size();i>=0;i--)
    {
        if(V[m][i]!=0)
        fo<<V[m][i]<<" ";
    }
    return 0;
}