Pagini recente » Cod sursa (job #471151) | Cod sursa (job #1544665) | Cod sursa (job #1504193) | Cod sursa (job #1434751) | Cod sursa (job #1898745)
#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;
}
}