Cod sursa(job #1071103)

Utilizator Daniel3717Aleca Daniel Adrian Daniel3717 Data 2 ianuarie 2014 16:17:57
Problema Subsir crescator maximal Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.26 kb
#include <iostream>
#include <fstream>
#include <vector>
#include <deque>
using namespace std;
vector <int> v;
vector <int>::iterator p;
vector <int> r;
deque <pair <int,int> > deck[100003];
int n,nr,i,pv,pd;
int main(void)
{
    FILE * f;
    f=fopen("scmax.in","r");
    ofstream g("scmax.out");
    fscanf(f,"%d",&n);
    fscanf(f,"%d",&nr);
    v.push_back(nr);
    deck[0].push_back(make_pair(nr,-1));
    for (i=2;i<=n;i++)
    {
        fscanf(f,"%d",&nr);
        p=lower_bound(v.begin(),v.end(),nr);
        if (p==v.end())
        {
            v.push_back(nr);
            deck[v.size()-1].push_back(make_pair(nr,deck[v.size()-2].size()-1));
        }
        else
            if (p==v.begin())
            {
                deck[0].push_back(make_pair(nr,-1));
                v[0]=nr;
            }
            else
            {
                deck[p-v.begin()].push_back(make_pair(nr,deck[v.size()-2].size()-1));
                v[p-v.begin()]=nr;
            }
    }
    pv=v.size()-1;
    pd=deck[pv].size()-1;
    while (pd!=-1)
    {
        r.push_back(deck[pv][pd].first);
        pd=deck[pv][pd].second;
        pv--;
    }
    g<<r.size()<<'\n';
    for (i=r.size()-1;i>=0;i--)
        g<<r[i]<<' ';
    return 0;
}