Pagini recente » Cod sursa (job #124874) | Cod sursa (job #1153728) | Cod sursa (job #722023) | Cod sursa (job #3589) | Cod sursa (job #4288)
Cod sursa(job #4288)
#include <stdio.h>
#include <fstream>
using namespace std;
#define in "subsir2.in"
#define out "subsir2.out"
#define dim 5001
int v[dim], t[dim], a[dim];
int n;
void ReadData();
void Solve();
int Ok(int,int);
int main()
{
ReadData();
Solve();
return 0;
}
void ReadData()
{
freopen(in,"r",stdin);
scanf("%d",&n);
for ( int i = 1; i <= n; i++ )
{
scanf("%d",v+i);
}
}
int Ok(int k,int p)
{
for ( int i = k+1; i < p; i++ )
if ( v[i] >= v[k] && v[i] <= v[p] ) return 0;
return 1;
}
void Solve()
{
freopen(out,"w",stdout);
for ( int i = 1; i <= n; i++ ) a[i] = 1;
a[1] = 1;
for ( int i = 1; i < n; i++ )
{
a[i] = 1;
int minim = 32001;
int poz = i;
for ( int j = i+1; j <= n; j++ )
{
if ( !Ok(i,j) ) continue;
if ( v[i] <= v[j] && minim > a[j] + 1 )
{
minim = a[j] + 1;
poz = j;
}
}
if ( minim != 32001 )
{
a[i] = minim;
t[i] = poz;
}
else
{
t[i] = i;
a[i] = 1;
}
}
int minim = 32001;
for ( int i = 1; i <= n; i++ )
{
printf("%d ", a[i]);
if ( minim > a[i] && a[i] != 1 ) minim = a[i]+1;
}
printf("%d\n",minim);
}