Cod sursa(job #634088)

Utilizator cristianalex81Cristian Alexandru cristianalex81 Data 15 noiembrie 2011 17:21:57
Problema Subsir crescator maximal Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.11 kb
#include <stdio.h>
#include <vector>

using namespace std;

int n;
vector <int> v;
vector <int> p;
vector <int> q;

void extract()
{
    int ppoz=n-1;
    int qpoz=q.size()-1;
    while (qpoz>=0)
    {
        if (qpoz!=p[ppoz])
            ppoz--;
        else
        {
            q[qpoz]=v[ppoz];
            qpoz--;
            ppoz--;
        }
    }
}

void build(int x)
{
    int l= q.size();
    if (l==0) // q is empty
    {
        q.push_back(x);
    }
    else
    {
        l--;
        if (x>q[l])
        {
            q.push_back(x);
            l++;
        }
        else
        {
            while ((l>=0)&&(x<=q[l]))
                l--;
            q[++l]=x;
        }
    }
    p.push_back(l);
}

void cit()
{
    int x;
    freopen("scmax.in","r",stdin);
    scanf("%d",&n);
    for (int i=0;i<n;i++)
    {
        scanf("%d",&x);
        v.push_back(x);
        build(x);
    }
}

void afis()
{
    freopen("scmax.out","w",stdout);
    int dim =q.size();
    printf("%d\n",dim);
    for (int i=0;i<dim;i++)
        printf("%d ",q[i]);
}

int main()
{
    cit();
    extract();
    afis();
    return 0;
}