Pagini recente » Istoria paginii runda/faherhe | Cod sursa (job #2001752) | Atasamentele paginii Clasament simulare_oji_2023_clasa_9_15_martie | Atasamentele paginii Clasament oni_gim_2016 | Cod sursa (job #134744)
Cod sursa(job #134744)
#include <stdio.h>
long int n, v[5001], best[5001], p[5001], ok[5001], maxim, k;
void afis(int i)
{
if (p[i]) { maxim++; afis(p[i]); }
if (!k){ printf("%d\n",maxim);k = 1;}
printf("%d ",i);
}
int main()
{
freopen("subsir2.in","r",stdin);
freopen("subsir2.out","w",stdout);
int i, j;
long val;
scanf("%ld",&n);
for (i = 1; i <= n; i++) scanf("%ld", v + i);
best[1] = 1; ok[1] = 1;
for (i = 2; i <= n; i++)
{
val = - 2000000;
for (j = i - 1; j >= 1; j--)
{
if (v[i] >= v[j] && (best[j] + 1 > best[i]) && (val < v[j] || v[i] < val))
{
best[i] = best[j] + 1;
if (!p[i] || v[j] < v[p[i]]) p[i] = j;
ok[j] = 1;
}
if (v[i] >= v[j]) ok[j] = 1;
if (val < v[j]) val = v[j];
}
if (! best[i]) best[i] = 1;
}
for (i = n; i >= 1; i--) if (!ok[i] && best[i] < maxim)
{
maxim = best[i];
val = i;
}
afis(val);
return 0;
}