Pagini recente » Cod sursa (job #83478) | Cod sursa (job #1680858) | Cod sursa (job #1202216) | Cod sursa (job #2914766) | Cod sursa (job #1718641)
#include <stdio.h>
#include <vector>
#include <algorithm>
#include <stack>
using namespace std;
int v[100005],p[100005];
vector<int> q;
stack<int> rez;
int main()
{
freopen("scmax.in","r",stdin);
freopen("scmax.out","w",stdout);
int n,i,j,l=0,pozl=1;
vector<int>::iterator pq;
scanf("%d",&n);
for(i=1;i<=n;i++)
scanf("%d",v+i);
q.push_back(v[1]);
p[1]=0;
for(i=2;i<=n;i++)
{
pq=lower_bound(q.begin(),q.end(),v[i]);
j=(int)(pq-q.begin());
if(*pq==v[i])
{
p[i]=j;
continue;
}
if(pq==q.end())
{
q.push_back(v[i]);
}
else *pq=v[i];
p[i]=j;
if(j>l) {l=j;pozl=i;}
}
printf("%d\n",l+1);
rez.push(v[pozl]);
l--;
for(i=pozl-1;i>0&&l>=0;i--)
{
if(p[i]==l&&v[i]<rez.top())
{
rez.push(v[i]);
l--;
}
}
while(!rez.empty())
{
printf("%d ",rez.top());
rez.pop();
}
return 0;
}