Cod sursa(job #723118)

Utilizator test0Victor test0 Data 24 martie 2012 22:29:03
Problema Subsir crescator maximal Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.91 kb
#include <stdio.h>
#include <set>
#include <vector>
using namespace std;
struct cont{ int pos,val; }nou;
bool compare(cont a,cont b){return a.val<b.val;}
bool(*point)(cont,cont)=compare;
set<cont,bool(*)(cont,cont)>s(point);
set<cont,bool(*)(cont,cont)>::iterator it;
vector<int>v;
int u[100005],a[100005];

int main(){
    int i,n,k=0;
    freopen("scmax.in","r",stdin);
    freopen("scmax.out","w",stdout);
        scanf("%d",&n);
    for(i=1;i<=n;i++){
        scanf("%d",&a[i]);
        nou.val=a[i];
        it=s.lower_bound(nou);
        if(it==s.end()){
            u[i]=++k;
            nou.pos=u[i];
            s.insert(nou); } else {
            nou.pos=it->pos;
            u[i]=nou.pos;
            s.erase(it);
            s.insert(nou); } }
    printf("%d\n",k);
    for(i=n;i>0;i--)
    if(u[i]==k){
        v.push_back(a[i]); k--; }
    for(;v.size()>0;){
        printf("%d ",v.back());
        v.pop_back(); }
}