Pagini recente » Cod sursa (job #2380322) | Cod sursa (job #738777) | Cod sursa (job #2563176) | Cod sursa (job #1435119) | Cod sursa (job #509104)
Cod sursa(job #509104)
#include <fstream>
#define nmax 5001
#define INF 100000
using namespace std;
ifstream fin("secv.in");
ofstream fout("secv.out");
int l[nmax], v[nmax], leg[nmax], uz[nmax], ok=1;
int n, maxim, lmax, m, minim, lungime, pozi, pozj, start, stop, tru=1;
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])
{
if(uz[v[k]]) tru=0;
else ++uz[v[k]];
// fout << uz[v[k]] << " " << v[k] << "\n";
++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)
{
tru = 1;
lungime = 1;
start = i;
for(j=1; j<=n; ++j)
uz[j] = 0;
rec(i);
if(minim>lungime)
{
minim = lungime;
pozi = start;
pozj = stop;
}
}
/*
for(i=1; i<=n; ++i)
fout << l[i] << " ";
fout << "\n";
for(i=1; i<=n; ++i)
fout << leg[i] << " ";
fout << "\n";
*/
fout << "-1\n";
return 0;
}