Pagini recente » Cod sursa (job #2920306) | Cod sursa (job #1190331) | Cod sursa (job #2917767) | Cod sursa (job #1481440) | Cod sursa (job #2132479)
#include <fstream>
using namespace std;
int v[100005]; ///vectorul de numere
int lmax[100005];/// lmax[i]=lungimea maxima a subsirului care incepe cu v[i]
int urm[100005;///urm[i]=cine urmeaza dupa v[i]
int n,i,j,k,jbest;
ifstream fin("date.in");
ofstream fout("date.out");
int main()
{ fin>>n;
for(i=1;i<=n;i++)fin>>v[i];
lmax[n]=1;urm[n]=0;
for(i=n-1;i;--i)
{ jbest=0;
for(j=i+1;j<=n;++j)
if(v[i]<v[j] && lmax[j]>lmax[jbest]) jbest=j;
lmax[i]=1+lmax[jbest];
urm[i]=jbest;
}
///determin cea mai mare valoare din lmax (k=pozitia pe care se afla maximul)
k=1;
for(i=2;i<=n;++i)
if(lmax[i]>lmax[k])k=i;
fout<<lmax[k]<<endl;
///extrag subsirul
while(k)
{
fout<<v[k]<<" ";
k=urm[k];
}
fin.close();fout.close();
return 0;
}