Pagini recente » Cod sursa (job #2870393) | Cod sursa (job #2336507) | Cod sursa (job #78790) | Cod sursa (job #2910865) | Cod sursa (job #2721816)
#include <bits/stdc++.h>
using namespace std;
const int NMAX=1e5+5;
int v[NMAX],poz[NMAX];
int main()
{
freopen("scmax.in","r",stdin);
freopen("scmax.out","w",stdout);
int n,i;
scanf("%d",&n);
vector<int>s;
for(i = 1; i <= n ; ++i)
{
scanf("%d",&v[i]);
if(s.empty())
{
s.push_back(v[i]);
poz[i]=1;
continue;
}
vector<int>::iterator it;
if(s[s.size()-1] < v[i])
{
s.push_back(v[i]);
poz[i]=s.size();
continue;
}
it = lower_bound(s.begin(),s.end(),v[i]);
s[it-s.begin()]=v[i];
poz[i]=it-s.begin()+1;
}
int cmax =0;
for(i = 1 ; i <= n ; ++i)
cmax=max(cmax,poz[i]);
cout<<cmax;
stack<int>st;
int ant = n;
for(i = cmax ; i>=1;--i)
{
while(poz[ant]!=i&&ant)
{
--ant;
}
st.push(ant);
}
printf("\n");
while(!st.empty())
{
printf("%d ",v[st.top()]);
st.pop();
}
return 0;
}