Cod sursa(job #1222090)

Utilizator rangerChihai Mihai ranger Data 22 august 2014 11:15:17
Problema Subsir crescator maximal Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.82 kb
#include<fstream>
#include<vector>
using namespace std;

ifstream cin("scmax.in");
ofstream cout("scmax.out");

const int nmax = 100010;

int a[nmax],v[nmax],t[nmax],n,k,i;
vector<int> res;

void cauta(int x)
{
    int l=1,r=k,sol;
    while (l<=r) {
        int mij=(l+r)/2;
        if (a[v[mij]]>x) sol=mij,r=mij-1;
         else l=mij+1;
    }
    if (x!=a[v[sol-1]])
        v[sol]=i,
        t[i]=v[sol-1];
}

int main()
{
    cin>>n;
    for (int i=1;i<=n;i++)
        cin>>a[i];
    v[++k]=1;
    for (i=2;i<=n;i++)
        if (a[i]>a[v[k]]) {v[++k]=i; t[i]=v[k-1];}
            else if (a[i]<a[v[k]])
                cauta(a[i]);
    cout<<k<<"\n"; k=v[k];
    while (k)
        res.push_back(a[k]),
        k=t[k];
    for (int i=res.size()-1;i>=0;i--) cout<<res[i]<<" ";
    return 0;
}