Cod sursa(job #1898745)

Utilizator AdrianGotcaAdrian Gotca AdrianGotca Data 2 martie 2017 11:24:27
Problema Subsir crescator maximal Scor 70
Compilator cpp Status done
Runda Arhiva educationala Marime 1.25 kb
#include <bits/stdc++.h>
#define NMAX 100005

using namespace std;

struct str1{
    int lg,start;
}ans;
struct str{
    int val,ind,lg,next;
}a[NMAX];
struct cmp{
    bool operator()(str &a,str &b){
        return (a.lg<b.lg)||(a.lg==b.lg&&a.ind>b.ind);
    }
};
priority_queue <str,vector <str>,cmp> q,aux;
int n;
int main(){
    freopen("scmax.in","r",stdin);
    freopen("scmax.out","w",stdout);
    scanf("%d",&n);
    for (int i=1;i<=n;i++){
        scanf("%d",&a[i].val);
        a[i].ind=i;
    }
    for (int i=n;i>0;i--){
        int lgmax=0;
        int urm=0;
        aux=q;
        while (!q.empty()){
            int lg=q.top().lg;
            int v=q.top().val;
            int j=q.top().ind;
            q.pop();
            if (v>a[i].val){
                if (lg>lgmax){
                    lgmax=lg;
                    urm=j;
                    break;
                }
            }
        }
        q=aux;
        a[i].lg=lgmax+1;
        a[i].next=urm;
        q.push(a[i]);
        if (ans.lg<lgmax+1){
            ans.lg=lgmax+1;
            ans.start=i;
        }
    }
    cout<<ans.lg<<'\n';
    int i=ans.start;
    while (i!=0){
        cout<<a[i].val<<' ';
        i=a[i].next;
    }
}