Pagini recente » Cod sursa (job #2805867) | Cod sursa (job #1977159) | Cod sursa (job #327036) | Cod sursa (job #276811) | Cod sursa (job #2794251)
#include<fstream>
using namespace std;
ifstream cin("scmax.in");
ofstream cout("scmax.out");
int nr,lg[100002],v[100002],n,pre[100002];
void cautare(int x,int k)
{
int st=1,m;
int dr=x;
while(st<=dr)
{
m=(st+dr)/2;
if(v[lg[m]]>v[k])
st=m+1;
else
dr=m-1;
}
if(v[lg[m]]>v[k])
{
lg[m+1]=k;
pre[k]=lg[m];
if(nr==m)
nr++;
}
else
if(v[lg[m]]<v[k])
lg[m]=k,pre[k]=lg[m-1];
}
int main()
{
cin>>n;
for(int i=1;i<=n;i++)
cin>>v[i];
pre[n]=0;
lg[1]=n;
nr=1;
for(int i=n-1;i>=1;i--)
cautare(nr,i);
cout<<nr<<'\n';
int x=lg[nr];
while(pre[x])
{
cout<<v[x]<<' ';
x=pre[x];
}
cout<<v[x];
}