Pagini recente » Istoria paginii runda/rar32/clasament | Cod sursa (job #2531285) | Cod sursa (job #2353252) | Cod sursa (job #2669230) | Cod sursa (job #1377737)
#include<iostream>
#include<fstream>
#include<algorithm>
using namespace std;
int maxi[100001],urm[100001],a[100001],lg,sir[100001];
int n,i,j,start;
void Citire()
{
ifstream fin("scmax.in");
fin>>n;
for (i=1; i<=n; i++)
fin>>a[i];
fin.close();
}
void LIS()
{
/// intializari
maxi[n]=1;
urm[n]=-1;
for (i=n-1; i>=1; i--)
{
maxi[i]=1;
urm[i]=-1;
for (j=i+1; j<=n; j++)
{
if (a[i]<a[j] && maxi[i] <= maxi[j])
{
maxi[i]=maxi[j]+1;
urm[i]=j;
}
}
}
/// sa gasim maximul
lg=maxi[1];
start=1;
for (i=2; i<n; i++)
{
if (maxi[i]>lg)
{
lg=maxi[i];
start=i;
}
}
}
void Afisare()
{
ofstream fout("scmax.out");
fout<<"lungimea e "<<lg<<"\n"; /// lungimea subsirului crescator de lg max
// sa creem subsirul
sir[1]=a[start];
for (i=2; i<=lg; i++)
{
start=urm[start];
sir[i]=a[start];
}
for (i=1; i<=lg; i++)
fout<<sir[i]<<" "; /// elementele sirului se afiseaza aici
fout.close();
}
int main ()
{
Citire();
LIS();
Afisare();
return 0;
}