Pagini recente » Cod sursa (job #735206) | Cod sursa (job #2224329) | Cod sursa (job #1729248) | Cod sursa (job #1186803) | Cod sursa (job #1860993)
#include <fstream>
using namespace std;
ifstream in("scmax.in");
ofstream out("scmax.out");
int r[100005],d[100005],lung[100005],pred[100005];
void sir(int p)
{
if(pred[p]!=0)
sir(pred[p]);
out<<r[p]<<" ";
}
int main()
{
int i,n,lmax;
in>>n;
for(i=1; i<=n; ++i)
in>>r[i];
for(i=1; i<=n; i++)
d[i]=-1;
d[0]=0;
/*for(i=1;i<=n;i++)
{
for(j=i;j>=1;--j)
{
if(r[i]>r[j])
{
if(d[i]>d[j])
d[i]=d[j]+1;
}
}
}*/
for(i=1; i<=n; i++)
{
lmax=0;
for(int j=1; j<i; j++)
{
if(r[j]<r[i])//if(r[j]>r[i]&&ultim[v[j]]==j)pt decrease
{//if(lung[j]==lmax)nr[i]+=nr[j];subsiruri
if(lung[j]>lmax)
{
lmax=lung[j];
pred[i]=j;//nr[i]=nr[j];
}
}
}
lung[i]=1+lmax;//decrease ultim[v[i]]=i;
}/*asta la inceput
For(parcurg numerele)
{ cin>>x;
if(x==xmax)
nrap++;
if(x>xmax)
xmax=x;
nrap=1;
}
SUBSIRURI*/
int pmax=1;
for(i=2; i<=n; ++i)
{
if(lung[i]>lung[pmax])
pmax=i;
}
out<<lung[pmax]<<"\n";
sir(pmax);
return 0;
}