Pagini recente » Cod sursa (job #967195) | Cod sursa (job #2460353) | Cod sursa (job #3291942) | Cod sursa (job #2871460) | Cod sursa (job #2572782)
#include <fstream>
using namespace std;
ifstream fin("scmax.in");
ofstream fout("scmax.out");
int k,d[100004],l[100004],a[100004],ant[100004],n,p,lmax,pm;
int cautbin(int x)
{
int p=1,u=k,mid;
while(p<=u)
{
mid=(p+u)/2;
if(a[d[mid]]>=x)
u=mid-1;
else
p=mid+1;
}
return p;
}
void afisare(int i)
{
if(ant[i]!=i)
{
afisare(ant[i]);
}
fout<<a[i]<<" ";
}
int main()
{
fin>>n;
for(int i=1;i<=n;i++)
{
fin>>a[i];
ant[i]=i;
l[i]=1;
}
d[1]=k=1;
for(int i=2;i<=n;i++)
{
p=cautbin(a[i]);
if(p==k+1)
k++;
d[p]=i;
if(p>l[i])
{
l[p]=p;
ant[i]=d[p-1];
}
if(l[p]>lmax)
{
lmax=l[p];
pm=i;
}
}
fout<<lmax<<"\n";
afisare(pm);
return 0;
}