Pagini recente » Istoria paginii runda/zienuntu/clasament | Cod sursa (job #780441) | Cod sursa (job #1525008) | Istoria paginii runda/ojisim1112 | Cod sursa (job #2631037)
#include<iostream>
#include<fstream>
#include<algorithm>
using namespace std;
int lungime[100001], urm[100001], a[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
for (int i = n; i >= 1; i--)
{
urm[i] = i;
lungime[i] = 1;
}
for (int i = n; i >= 1; i--)
{
int maxim = 0;
for (int j = i - 1; j >= 1; j--)
{
if ((a[j] < a[i]) && (lungime[i] + 1 > lungime[j]))
{
lungime[j] = lungime[i] + 1;
urm[j] = i;
}
}
}
}
void Afisare()
{
ofstream fout("scmax.out");
int maxim = 0;
int poz = 0;
for (int i = 1; i <= n; i++)
{
if (maxim < lungime[i])
{
maxim = lungime[i];
poz = i;
}
}
fout << maxim << endl;
fout << a[poz] << " ";
while (urm[poz] != poz)
{
poz = urm[poz];
fout << a[poz] << " ";
}
fout.close();
}
int main ()
{
Citire();
LIS();
Afisare();
return 0;
}