Pagini recente » Cod sursa (job #1864536) | Cod sursa (job #2557798)
#include <fstream>
/// Subsir crescator maximal
using namespace std;
ifstream f("scmax.in");
ofstream g("scmax.out");
int n, a[100001], r[100001], y=0, lmax=1, lungime_max;
void citire()
{
f>>n;
for(int i=1; i<=n; ++i)
f>>a[i];
}
void afisare()
{
g<< lungime_max << '\n';
for(int i=y; i>=1; --i)
g<< a[r[i]] << ' ';
}
int main()
{
int k=1, u=1, p[100001], q[100001];
citire();
q[1]=a[1];
p[1]=1;
for(int i=2; i<=n; ++i)
{
if(a[i]>q[k])
{
q[++k]=a[i];
p[++u]=++lmax;
}
else for(int j=1; j<=k; ++j)
if(q[j]>=a[i])
{
q[j]=a[i];
p[++u]=j;
break;
}
}
lungime_max=lmax;
for(int i=u; i>=1; --i)
{
while(p[i]!=lmax)
--i;
r[++y]=i;
lmax--;
if(lmax==0)
break;
}
afisare();
return 0;
}