Pagini recente » Cod sursa (job #160120) | Cod sursa (job #1290236) | Cod sursa (job #1239277) | Cod sursa (job #1856477) | Cod sursa (job #1517739)
#include <iostream>
#include <fstream>
#include <stack>
#define nmax 100005
using namespace std;
int n;
int a[nmax];
int s1[nmax];
int s2[nmax];
stack<int> sol;
void read()
{
scanf("%d ",&n);
for(int i=1;i<=n;i++)
scanf("%d ",&a[i]);
}
int search_binary(int st,int dr,int x)
{
if(st==dr)
{
s1[st]=x;
return st;
}
int mij=(st+dr)/2;
if(s1[mij]>=x)
return search_binary(st,mij,x);
else
return search_binary(mij+1,dr,x);
}
void solve()
{
for(int i=1;i<=n;i++)
if(s1[s1[0]]<a[i])
{s1[++s1[0]]=a[i];
s2[i]=s1[0];}
else s2[i]=search_binary(1,s1[0],a[i]);
printf("%d\n",s1[0]);
for(int i=n;i>=1;i--)
if(s2[i]==s1[0] && s1[s1[0]]<=a[i])
{sol.push(a[i]);
s1[0]--;
}
while(!sol.empty())
{
printf("%d ",sol.top());
sol.pop();
}
}
int main()
{
freopen("scmax.in","r",stdin);
freopen("scmax.out","w",stdout);
read();
solve();
return 0;
}