Pagini recente » Cod sursa (job #2990512) | Cod sursa (job #3180553) | Cod sursa (job #179081) | Cod sursa (job #1748570) | Cod sursa (job #22628)
Cod sursa(job #22628)
#include<stdio.h>
#define dim 5001
int a[dim],t[dim],l[dim],b[dim];
int nr;
int n;
int k;
void citire();
int dinamica();
void afis(int );
void afis(int );
void solve();
int main()
{
freopen("secv.in","r",stdin);
freopen("secv.out","w",stdout);
citire();
k=dinamica();
//printf("%d ",k);
afis(k);
solve();
return 0;
}
void citire()
{
scanf("%d",&n);
int i;
for(i=1;i<=n;i++)
scanf("%d",&a[i]);
}
int dinamica()
{
int i,j,max,k;
for(i=1;i<=n;i++)
{
max=1;
t[i]=0;
for(j=1;j<i;j++)
if(a[j]<a[i] && l[j]+1>max)
{
max=l[j]+1;
t[i]=j;
}
l[i]=max;
}
max=0;
for(i=1;i<=n;i++)
if(l[i]>max)
{
max=l[i];
k=i;
}
return k;
}
void afis(int i)
{
if(i==0) return ;
afis(t[i]);
b[++nr]=a[i];
}
void solve()
{
int i,sol=0,j,poz;
for(i=1;i<=n;i++)
{
for(j=1;j<=nr;j++)
if(a[i]==b[j])
sol++;
}
if(sol!=n)
printf("-1");
else
{
for(i=1;i<=n;i++)
{
if(a[i]==b[1])
break;
}
poz=i;
printf("%d",k-poz+1);
//printf("%d ",poz);
}
}