Pagini recente » Cod sursa (job #285786) | Cod sursa (job #2367065) | Cod sursa (job #15501) | Cod sursa (job #2590425) | Cod sursa (job #1083432)
#include <iostream>
#include<fstream>
using namespace std;
int v[50001],a[50001],n,i,s,j,aux, c[50001];
int pozitie(int ls, int ld)
{
int i=ls,j=ld,di=0,dj=1,x;
while(i<j)
{
if(a[i]>a[j])
{x=a[i];a[i]=a[j];a[j]=x;
x=di;di=dj;dj=x;
}
i=i+di;j=j-dj;
}
return i;
}
void quick(int ls,int ld)
{int k;
if(ls<ld)
{
k=pozitie(ls,ld);
quick(ls,k-1);
quick(k+1,ld);
}
}
int main()
{
ifstream f("secv.in");
ofstream g("secv.out");
f>>n;
for(i=1;i<=n;i++)
{f>>v[i];a[i]=v[i];}
quick(1,n);
i=1;
j=2;
while(j<=n)
{
if(a[i]==a[j])
j++;
else
{a[i+1]=a[j];
i++;j++;}
}
int m=i, M=0, L;
L=n;
//for(i=1;i<m;i++)
//cout<<a[i]<<" ";
c[1]=1;a[1]=0;
for(i=2;i<=n;i++)
{c[i]=1;a[i]=i;
for(j=1;j<i;j++)
if(v[i]>v[j])
{if(c[j]+1>c[i])
{c[i]=c[j]+1;
a[i]=a[j];
if(c[i]==m)
if(L>i-a[i]+1)
L=i-a[i]+1;
if(M<c[i])M=c[i];}}}
//for(i=1;i<=n;i++)
//cout<<c[i]<<" ";
if(M==m)
g<<L;
else
g<<"-1";
f.close();
g.close();
return 0;
}