Pagini recente » Cod sursa (job #1983353) | Cod sursa (job #1707890) | Cod sursa (job #1257764) | Cod sursa (job #2002255) | Cod sursa (job #1687631)
#include <fstream>
using namespace std;
int n,v[100003],sol[100003],best[100003],m,maxim,poz,i,ap[100003],mx;
int cautbin(int x)
{
int start=0;
int step=1;
for(; step<=m; step<<=1);
for(; step; step>>=1)
{
int index = step+start;
if(index>m)
continue;
if(sol[index]<x)
start=index;
}
return start;
}
int main()
{
ifstream f("scmax.in");
ofstream g("scmax.out");
f>>n;
f>>v[1];
for(i=2;i<=n;i++)
{
f>>v[i];
if(mx<v[i])
mx=v[i];
}
if(mx<v[1])
mx=v[1];
sol[1]=v[1];
best[1]=1;
m=1;
for(i=2;i<=n;i++)
{
if(v[i]<sol[m])
{
poz=cautbin(v[i]);
sol[poz+1]=v[i];
best[i]=poz+1;
}
else if(v[i]>sol[m])
{
m++;
sol[m]=v[i];
best[i]=m;
}
}
maxim=0;
poz=0;
for(i=1;i<=n;i++)
{
if(best[i]>maxim)
maxim=best[i];
}
g<<maxim;
if(maxim>1)
{
for(i=n;i>=1;i--)
{
if((best[i]==maxim) && (ap[maxim]==0))
{
ap[maxim]=v[i];
maxim--;
}
}
g<<"\n";
for(i=1;i<=n;i++)
if(ap[i])
g<<ap[i]<<" ";
}
else
{
g<<"\n";
g<<mx;
}
}