Pagini recente » Cod sursa (job #1915494) | Cod sursa (job #1071007)
#include<stdio.h>
#include<iostream>
#include<fstream>
using namespace std;
int n, V[100003], sol[100003], A[100003], secv[100003], nr,sum_maxim;
ifstream in("scmax.in");
ofstream out("scmax.out");
void print(int i)
{
if (A[i]>0) print(A[i]);
out<<V[i]<<" ";
}
int binary(int x)
{
int st=0, dr=nr, mid=(st+dr)/2;
while (st<=dr)
{
if (V[secv[mid]]<x && V[secv[mid+1]]>=x) return mid;
else if (V[secv[mid+1]] < x)
{
st=mid+1;
mid=(st+dr)/2;
}
else {
dr=mid-1;
mid=(st+dr)/2;
}
}
return nr;
}
int main()
{
int i,poz;
nr = 1;
in>>n;
for (i=1;i<=n;i++)
in>>V[i];
sol[1] = secv[1] = 1;
secv[0] = 0;
for (i=2;i<=n;i++)
{
poz=binary(V[i]);
A[i]=secv[poz];
sol[i]=poz+1;
secv[poz+1]=i;
if(nr<poz+1) nr=poz+1;
}
sum_maxim = 0;
poz = 0;
for (i=1;i<=n;i++)
if (sum_maxim<sol[i])
{
sum_maxim=sol[i];
poz=i;
}
out<<sum_maxim<<"\n";
print(poz);
return 0;
}