Pagini recente » Cod sursa (job #2074374) | Cod sursa (job #2853760) | Cod sursa (job #1482350) | Cod sursa (job #1524794) | Cod sursa (job #520431)
Cod sursa(job #520431)
#include <fstream>
#include <algorithm>
using namespace std;
#define dim 5001
int v[dim],a[dim],b[dim],best[dim],q[dim];
int main()
{
ifstream fin("secv.in");
ofstream fout("secv.out");
int i, n,m=1,j,maxim=1;
fin>>n;
if(n==0)
{
fout<<"1";
return 0;
}
for(i=1;i<=n;++i)
{
fin>>v[i];
a[i]=v[i];
}
sort(a+1,a+n+1);
for(i=1;i<=n;++i)
{
while(a[i]==a[i+1])
++i;
b[m]=a[i];
++m;
}
--m;
for(i=1;i<=n;++i)
best[i]=1;
for(i=2;i<=n;++i)
{
for(j=i-1;j>=1;--j)
{
if(v[i]>v[j])
{
if(best[j]+1>best[i])
best[i]=best[j]+1;
}
else
if(v[i]==v[j])
{
if(best[j]>best[i])
best[i]=best[j];
}
}
if(maxim<best[i])
maxim=best[i];
}
int chiul=1;
for(i=1;i<=n;++i)
if(best[i]==maxim)
{
q[chiul]=i;
++chiul;
}
if(maxim!=m)
{
fout<<"1";
return 0;
}
int contor,lung=dim,lulu,mare,aux;
for(i=n;i>=1;--i)
{
while((v[i]==v[i-1] || best[i]!=maxim) && i>0)
--i;
aux=maxim;
lulu=i;
contor=0;
int valid=0;
while(aux>0 && lulu>0)
{
if(best[lulu]==aux)
--aux;
++contor;
--lulu;
valid=1;
}
if(contor<lung && valid==1)
{
mare=1;
lung=contor;
aux=maxim;
for(j=lulu;j>=i+1;--j)
{
if(best[j]==aux)
{
a[mare]=v[j];
++mare;
--aux;
}
}
}
}
--mare;
sort(a+1,a+mare+1);
int ok=1;
if(ok==0)
fout<<"1";
else
fout<<lung;
return 0;
}