Pagini recente » Cod sursa (job #2585481) | Cod sursa (job #1672791) | Cod sursa (job #2758673) | Cod sursa (job #1235104) | Cod sursa (job #2063109)
#include <fstream>
using namespace std;
ifstream f("scmax.in");
ofstream g("scmax.out");
int n;int b[100001],a[100001],l[100001],lmax;int k;
int caut(int x)
{
int m,p=1,u=n;
while (p<=u)
{
m=(p+u)/2;
if (x>b[m])
{
p=m+1;
}
else
{
u=m-1;
}
}
return u;
}
void solve()
{
int i,poz;
for (i=1;i<=n;i++)
{
poz=caut(a[i]);
if (a[i]<b[poz+1])
{
b[poz+1]=a[i];
l[i]=poz+1;
}
if (l[i]>lmax)
{
lmax=l[i];
k=i;
}
}
}
void drum(int k)
{
int j;
for (j=k;j>=1&&lmax;j--)
{
if (l[j]==lmax&&a[j]<=a[k])
{
lmax--;
drum(j); g<<a[j]<<" ";
}
}
}
int main()
{
int i;
f>>n;
for (i=1;i<=n;i++)
{
f>>a[i];
b[i]=1000000001;
}
solve();
g<<lmax<<'\n';
drum(k);
return 0;
}