Pagini recente » Cod sursa (job #281156) | Istoria paginii runda/kingofthedead/clasament | Cod sursa (job #892368) | Cod sursa (job #2922284) | Cod sursa (job #138725)
Cod sursa(job #138725)
#include <stdio.h>
int n, v[5001], a[5001], t[5001], k, ok[5001];
void afis(int i)
{
printf("%d ",i);
if (i != t[i]){ i = t[i]; afis(i);}
}
int main()
{
freopen("subsir2.in","r",stdin);
freopen("subsir2.out","w",stdout);
int i, j, min, poz, p;
scanf("%d",&n);
for (i = 1; i <= n; i++) scanf("%d", v + i);
a[n] = 1;
for (i = n; i >= 1; i--)
{
min = 10000;
k = v[i+1];
p = i + 1;
for (j = i + 1; j <= n; j++)
{
if (k > v[j] && v[j] > v[i]) k = v[j], p = j;
if (v[i] < v[j] && a[j] < min )
{
if (p != j)
{
if (k < v[i] || k > v[j]) min = a[j], poz = j;
}
else min = a[j], poz = j;
}
else if (v[i] < v[j] && a[j] == min)
{
if (v[j] < v[poz])
if (k < v[i] || k > v[j]) min = a[j], poz = j;
}
if (v[i] <= v[j]) ok[j] = 1;
}
if (min != 10000)
{
t[i] = poz;
a[i] = min + 1;
}
else a[i] = 1, t[i] = i;
}
min = 10000;
for (i = 1; i <= n; i++) if (a[i] < min && !ok[i]) min = i;
printf("%d\n",a[min]);
afis(min);
printf("\n");
return 0;
}