Cod sursa(job #1156893)

Utilizator marta_diannaFII Filimon Marta Diana marta_dianna Data 28 martie 2014 09:08:14
Problema Subsir crescator maximal Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.08 kb
#include<fstream>
#include<utility>
#include<set>
#define NMAX 100010

using namespace std;

ifstream f("scmax.in");
ofstream g("scmax.out");

int i, n, nr=0, a[NMAX], loc[NMAX], sol[NMAX];
set< pair<int, int> > S;

void Citeste()
{
    int i;

    f>>n;
    for (i=1; i<=n; ++i) f>>a[i];
}

void Solve()
{
    int i, o;
    set<pair<int, int> > :: iterator it;

    for (i=1; i<=n; ++i)
    {
        it=S.upper_bound(make_pair(a[i], 0));
        if ( S.empty()  || it==S.end() )
        {
            S.insert(make_pair(a[i], ++nr));
            loc[i]=nr;
        }
        else
        {
            loc[i]=it->second;
            S.erase(*it);
            S.insert(make_pair(a[i], loc[i]));

        }
    }
}

void Scrie()
{
    int x=S.size(), i;

    g<<x<<"\n";

    for (i=n; i>0; --i)
        if (loc[i]==x)
        {
            --x;
            sol[++sol[0]]=a[i];
        }
    for (i=sol[0]; i>0; --i) g<<sol[i]<<" ";
}

int main()
{
    Citeste();

    Solve();

    Scrie();

    f.close();
    g.close();
    return 0;
}