Cod sursa(job #1792620)

Utilizator sebi110Ciobanu Sebastian sebi110 Data 30 octombrie 2016 16:23:50
Problema Subsir crescator maximal Scor 90
Compilator cpp Status done
Runda Arhiva educationala Marime 1.73 kb
#include <fstream>
#include <vector>
using namespace std;
ifstream fin("scmax.in");
ofstream fout("scmax.out");
vector <int> v[100001];
void adaug(int x)
{
    int i;
    for(i=v[0][0];i>1;i--)
    {
        if(x<v[i][i-1] && x>v[i][i-2])
        {
            v[i][i-1]=x;
            return ;
        }
        else
        {
            if(x>v[i][i-1])
            {
                if(i!=v[0][0])
                {
                    if(x<v[i+1][i])
                    {
                        v[i+1].clear();
                        for(int j=0;j<i;j++)
                            v[i+1].push_back(v[i][j]);
                        v[i+1].push_back(x);
                        return ;
                    }
                }
                else
                {
                        for(int j=0;j<i;j++)
                            v[i+1].push_back(v[i][j]);
                        v[0][0]++;
                        v[i+1].push_back(x);
                        return ;
                }
            }
        }
    }
    if(v[1][0]>x)
    {
        v[1][0]=x;
    }
    else
    {
        if(v[0][0]>1)
        {
            if(x<v[2][1] && x>v[1][0])
                v[2][0]=v[1][0];v[2][1]=x;
        }
        else
        {
            if(x>v[1][0])
            {
                v[0][0]++;
                v[2].push_back(v[1][0]);
                v[2].push_back(x);
            }
        }
    }
}
int main()
{
    int n,x,i;
    fin>>n;
    fin>>x;
    v[1].push_back(x);
    v[0].push_back(1);
    for(i=2;i<=n;i++)
    {
        fin>>x;
        adaug(x);
    }
    fout<<v[0][0]<<'\n';
    for(i=0;i<v[0][0];i++)
        fout<<v[v[0][0]][i]<<' ';
    return 0;
}