Pagini recente » Cod sursa (job #1854670) | Cod sursa (job #2524769) | Cod sursa (job #407155) | preONI 2008, Clasament Runda Finala, Clasa a 9-a | Cod sursa (job #1656050)
#include <fstream>
using namespace std;
ifstream fin("scmax.in");
ofstream fout("scmax.out");
struct lista{int val, id;};
lista sh[100005];
int n, last, a[100005], pre[100005], x, N[100005], nr;
int main()
{
int i, j, k;
fin>>n;
for (i=1; i<=n; i++)
{
fin>>a[i];
}
last=1;
sh[1].val=a[1];
sh[1].id=1;
pre[1]=1;
for (i=2; i<=n; i++)
{
for (j=last; j>=0; j--)
{
if (a[i]>sh[j].val)
{
if (a[i]<sh[j+1].val || sh[j+1].val==0)
{
sh[j+1].val=a[i];
sh[j+1].id=i;
if (j==0)
pre[i]=i;
else
pre[i]=sh[j].id;
if (j+1>last)
{
last=j+1;
}
}
break;
}
}
}
fout<<last<<'\n';
x=sh[last].id;
N[++nr]=sh[last].val;
while (x!=pre[x])
{
x=pre[x];
N[++nr]=a[x];
}
for (i=nr; i>=1; i--)
{
fout<<N[i]<<" ";
}
return 0;
}