Cod sursa(job #1392556)

Utilizator alexalghisiAlghisi Alessandro Paolo alexalghisi Data 18 martie 2015 18:44:40
Problema Subsir crescator maximal Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.92 kb
#include <iostream>
#include <fstream>
#include <cstring>
#include <vector>
#include <algorithm>

#define DN 100005
using namespace std;

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

int v[DN],mini[DN],n,sz,pos[DN];
vector<int> rez;



void read(){

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

void solve(){

    memset(mini,127,sizeof(mini));
    mini[0] = 0;
    for(int i=1;i<=n;++i){

        int j;
        for(j=sz;j>=0 and mini[j] >= v[i];--j);

        pos[i] = j + 1;
        mini[j+1] = min(mini[j+1],v[i]);
        sz=max(sz,j+1);
        //cout<<i<<"->"<<v[i]<<" "<<pos[i]<<endl;
    }

    g<<sz<<"\n";
    int current = sz;

    for(int i=n;i>=1 and current >=1;--i)
        if(pos[i] == current){
            rez.push_back(v[i]);
            --current;
        }
    reverse(rez.begin(),rez.end());
    for(int i=0;i<rez.size();++i)
        g<<rez[i]<<" ";
}

int main()
{
    read();
    solve();
    return 0;
}