Pagini recente » Statistici Boboc Dragos Mihai (Dragwosh) | Borderou de evaluare (job #3145829) | Borderou de evaluare (job #3034536) | Borderou de evaluare (job #3330269) | Cod sursa (job #891761)
Cod sursa(job #891761)
// Subsir crescator maximal - complexitate O(n^2);
#include <iostream>
#include <algorithm>
#include <fstream>
using namespace std;
int n, a[100010], best[100010], pred[100010], sol, pozsol, vsol[100010], nvsol;
// best[i] = lungimea celui mai lung subsir care se termina pe pozitia i
// pred[i] = predecesorul elementului i
inline void Read()
{
ifstream f ("scmax.in");
f>>n;
int i;
for (i=1; i<=n; i++)
f>>a[i];
f.close();
}
inline void LIS()
{
int i, j, pos, maxim;
for (i=1; i<=n; i++)
{
pos = -1;
maxim = 0;
for (j=1; j<i; j++)
if (a[j] < a[i] && best[j] > maxim)
{
maxim = best[j];
pos = j;
}
best[i] = maxim + 1;
pred[i] = pos;
if (best[i] > sol)
{
sol = best[i];
pozsol = i;
}
}
}
inline void Write()
{
ofstream g("scmax.out");
g<<sol<<"\n";
do
{
vsol[++nvsol] = a[pozsol];
pozsol = pred[pozsol];
} while (pozsol != -1);
for (int i=nvsol; i; i--)
g<<vsol[i]<<" ";
g<<"\n";
g.close();
}
int main()
{
Read();
LIS();
Write();
return 0;
}