Pagini recente » Cod sursa (job #2213961) | Cod sursa (job #1206376) | Cod sursa (job #1134869) | Cod sursa (job #860745) | Cod sursa (job #2827914)
#include <fstream>
using namespace std;
const int N = 1e5;
ifstream in("scmax.in");
ofstream out("scmax.out");
int n, v[N], lung[N];
void sirul(int poz)
{
///caut in stanga lui poz un p cu v[p]<v[poz] si lung[p]=lung[poz]-1
int p = poz - 1;
while (p >= 0 && (v[p] >= v[poz] || lung[p] != lung[poz] - 1))
{
p--;
}
if (p >= 0)
{
sirul(p);
}
out << v[poz] << " ";
}
int main()
{
in >> n;
int pmax = 0;
for (int i = 0; i < n; i++)
{
in >> v[i];
int lc = 0;
for (int j = 0; j < i; j++)
{
if (v[j] < v[i])
{
lc = max(lc, lung[j]);
}
}
lung[i] = 1 + lc;///il adaug pe v[i] la cel mai lung subsir str. cresc. la care il pot lipi
if (lung[i] > lung[pmax])
{
pmax = i;
}
}
out << lung[pmax] << "\n";
sirul(pmax);
in.close();
out.close();
return 0;
}