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