Cod sursa(job #739400)

Utilizator test0Victor test0 Data 22 aprilie 2012 23:05:13
Problema Subsir crescator maximal Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.7 kb
#include <cstdio>
#include <vector>
#include <algorithm>
#define MAX 100001
using namespace std;
vector<int>Q;
vector<int>::iterator it;
int n,k,V[MAX],BST[MAX];

void put(int k,int n){
    for(;n>=0;n--)
    if(BST[n]==k){ put(k-1,n-1);
        printf("%d ",V[n]); return ; }
}

int main(){
    freopen("scmax.in","r",stdin);
    freopen("scmax.out","w",stdout);
        scanf("%d",&n);
        for(int i=0;i<n;i++)scanf("%d",&V[i]);
    for(int i=0;i<n;i++){
        it=lower_bound(Q.begin(),Q.end(),V[i]);
        if(it==Q.end()){
            Q.push_back(V[i]);
            BST[i]=Q.size(); } else {
            *it=V[i];
            BST[i]=it-Q.begin()+1; }
    }
    printf("%d\n",Q.size());
    put(Q.size(),n);
}