Pagini recente » Cod sursa (job #1893726) | Cod sursa (job #949354) | Cod sursa (job #1305818) | Cod sursa (job #213059) | Cod sursa (job #1246860)
#include <fstream>
using namespace std;
ifstream f("scmax.in");
ofstream g("scmax.out");
int n,s[10000000],l[10000000],k,v[10000000],x,maxi,r,vect[10000000];
int cautbin(int a,int b,int x)
{
int m=(a+b)/2;
if(a==b)
return a;
if(x<s[m])
cautbin(a,m,x);
else if(x>s[m])
cautbin(m+1,b,x);
}
int main()
{
f>>n;
for(int i=1;i<=n;i++)
f>>v[i];
s[1]=v[1];
l[1]=++k;
for(int i=2;i<=n;i++)
{
if(v[i]>s[k])
{
l[i]=++k;
s[k]=v[i];
}
else
{
x=cautbin(1,k,v[i]);
s[x]=v[i];
l[i]=x;
}
}
for(int i=1;i<=n;i++)
if(maxi<l[i])
maxi=l[i];
for(int i=n;i>=1;i--)
{
if(l[i]==maxi)
{
maxi--;
vect[++r]=v[i];
}
if(maxi==0)
break;
}
g<<r<<'\n';
for(int i=r;i>=1;i--)
g<<vect[i]<<" ";
return 0;
}