Pagini recente » Cod sursa (job #2533019) | Cod sursa (job #1533167) | Cod sursa (job #2555219) | Cod sursa (job #1793997) | Cod sursa (job #2196605)
#include <iostream>
#include <fstream>
#define lim 100005
using namespace std;
ifstream in("scmax.in");
ofstream out("scmax.out");
int v[lim], poz[lim], ult[lim], i, n, lung, rs, smax[lim], k;
int cautare_binara(int st, int dr, int val)
{
int mij;
while(st<=dr)
{
mij=(st+dr)/2;
if(v[poz[mij]]>=val)
{
dr=mij-1;
}
else
{
st=mij+1;
}
}
return st;
}
int main()
{
in>>n;
for(i=1; i<=n; ++i)
{
in>>v[i];
}
poz[1]=1;
lung=1;
for(i=2; i<=n; ++i)
{
rs=cautare_binara(1, lung, v[i]);
poz[rs]=i;
if(rs==1)
{
ult[i]=0;
}
else
{
ult[i]=poz[rs-1];
}
lung=max(lung, rs);
}
out<<lung<<"\n";
/*for(i=1; i<=lung; ++i)
out<<poz[i]<<" ";
out<<'\n';
for(i=1; i<=n; ++i)
out<<ult[i]<<" ";
out<<'\n';*/
for(i=poz[lung]; ult[i]!=0; i=ult[i])
{
smax[++k]=v[i];
}
smax[++k]=v[i];
for(i=k; i>=1; --i)
out<<smax[i]<<" ";
return 0;
}