Pagini recente » Cod sursa (job #1272658) | Cod sursa (job #2096783) | Cod sursa (job #933912) | Cod sursa (job #2626646) | Cod sursa (job #2076923)
#include <fstream>
using namespace std;
ifstream fin("scmax.in");
ofstream fout("scmax.out");
int n, nr=1, maxim, s[100003], best[100003], pv[100003], l[100003];
void scrie(int k)
{
if(pv[k]!=0)
scrie(pv[k]);
fout<<s[k]<<' ';
}
int bs(int x)
{
int st, dr, mijl;
st=0, dr=nr;
while(st<=dr)
{
mijl=(st+dr)/2;
if(s[l[mijl]]<x && s[l[mijl+1]]>=x)
return mijl;
if(s[l[mijl]]<x)
st=mijl+1;
else
dr=mijl-1;
}
return nr;
}
int main()
{
int i, poz;
fin>>n;
for(i=1; i<=n; i++)
fin>>s[i];
best[1]=1;
l[1]=1;
for(i=2; i<=n; i++)
{
poz=bs(s[i]);
pv[i]=l[poz];
best[i]=poz+1;
l[poz+1]=i;
if(nr<poz+1)
nr=poz+1;
}
for(i=1; i<=n; i++)
if(maxim<best[i])
maxim=best[i], poz=i;
fout<<maxim<<'\n';
scrie(poz);
return 0;
}