Cod sursa(job #956388)

Utilizator cousin.batmanVaru Batman cousin.batman Data 2 iunie 2013 23:56:53
Problema Subsir crescator maximal Scor 90
Compilator cpp Status done
Runda Arhiva educationala Marime 0.78 kb
#include<iostream>
#include<fstream>
#include<vector>
#include<list>
using namespace std;

int scn;
vector<int> a, p, s;

int main(){
    int i, n, m, scmax, step;
    ifstream in("scmax.in");
    ofstream out("scmax.out");

    in>>n;
    a.resize(n), p.resize(n), s.resize(n);
    scmax = 0;

    for(i=0; i<n; i++){
        in>>a[i];

        for(step=1; step<<1<scmax; step<<=1);
        for(m=scmax; step; step>>=1)
            if(m-step >=0 && a[s[m-step]]>=a[i]) m-=step;

        s[m] = i;
        p[i] = m>0?s[m-1]:-1;
        if(m==scmax) scmax++;
    }

    out<<scmax<<endl;

    list<int> result;
    m = s[scmax-1];
    while(m!=-1){
        result.push_front(a[m]);
        m = p[m];
    }
    for(int i: result)
        out<<i<<" ";

    in.close();
    out.close();
    return 0;
}