Pagini recente » Cod sursa (job #410163) | Cod sursa (job #1894009) | Cod sursa (job #2192391) | Cod sursa (job #1697563) | Cod sursa (job #873689)
Cod sursa(job #873689)
#include <fstream>
using namespace std;
ifstream f("scmax.in");
ofstream g("scmax.out");
int n,i,k,p,x[100002],v[100002],l[100002],max1,nr,ind[100002];
int pozitie(int p, int u, int a)
{
int mij;
while (p<=u)
{
mij=(u-p)/2+p;
if(a==v[mij])
return mij;
if(a<v[mij])
u=mij-1;
if(a>v[mij])
p=mij+1;
}
return p;
}
int main()
{
f>>n;
// k=0 -> numarul de elemente din v
for(i=1;i<=n;i++)
{
f>>x[i];
p=pozitie(1,k,x[i]);
v[p]=x[i];
if(p>=k)
k=p;
l[i]=p;
if(k>max1)
{max1=k; nr=i;}
}
k=max1;
ind[k]=x[nr];
for(i=nr-1;i>=1;i--)
{
if(l[i]==k-1 && x[i]<ind[k])
{ind[k-1]=x[i]; k--;}
}
g<<max1<<'\n';
for(i=1;i<=max1;i++)
g<<ind[i]<<' ';
return 0;
}