Pagini recente » Cod sursa (job #956027) | Cod sursa (job #2821025) | Cod sursa (job #2162771) | Cod sursa (job #2027755) | Cod sursa (job #1102771)
#include <fstream>
using namespace std;
ifstream f("scmax.in");
ofstream g("scmax.out");
long long pred[100100],m,j=1,d,i,n,x[100100],l,v[100100];
void afisare(int nr)
{
if(pred[nr])
afisare(pred[nr]);
g<<v[nr]<<" ";
}
int main()
{
f>>n;
for(i=1;i<=n;i++)
{
f>>v[i];
while((j<<1)<=l)
j<<=1;
m=0;
d=j;
while(d)
{
if(m+d<=l&&v[i]>v[x[m+d]])
m+=d;
d>>=1;
}
if(m==l)
{
x[++l]=i;
pred[i]=x[l-1];
}
else
{
if(v[i]<v[x[m+1]])
{
x[m+1]=i;
pred[i]=x[m];
}
}
}
g<<l<<'\n';
afisare(x[l]);
g<<'\n';
return 0;
}