Pagini recente » Cod sursa (job #1247376) | Cod sursa (job #555551) | Cod sursa (job #1428745) | Cod sursa (job #2657927) | Cod sursa (job #509097)
Cod sursa(job #509097)
#include <fstream>
#define nmax 500
#define INF 100000
using namespace std;
ifstream fin("secv.in");
ofstream fout("secv.out");
int l[nmax], v[nmax], leg[nmax], uz[nmax];
int n, maxim, lmax, m, minim, lungime, pozi, pozj, start, stop;
void praaa()
{
int i, j, poz;
l[n] = 1;
for(i=n-1; i>=1; --i)
{
maxim = 0;
for(j=i+1; j<=n; ++j)
if(v[i]<v[j] && l[j]>=maxim)
{
maxim = l[j];
poz = j;
}
l[i] = maxim+1;
leg[i] = poz;
if(l[i] > lmax) lmax = l[i];
}
}
void rec(int k)
{
if(leg[k])
{
++uz[v[k]];
++lungime;
stop = leg[k];
rec(leg[k]);
}
}
int main()
{
int i, j;
minim = INF;
fin >> n;
for(i=1; i<=n; ++i)
fin >> v[i];
praaa();
for(i=1; i<=n; ++i)
if(l[i] == lmax)
{
lungime = 1;
start = i;
for(j=1; j<=n; ++j)
uz[j] = 0;
rec(i);
if(minim>lungime)
{
minim = lungime;
pozi = start;
pozj = stop;
}
}
if(n==1)
if(minim==1)
{
fout << 1 << "\n";
return 0;
}
if(pozi && pozj)
fout << pozj-pozi+1 << "\n";
return 0;
}