Pagini recente » Cod sursa (job #2480730) | Cod sursa (job #1981231) | Cod sursa (job #1213512) | Cod sursa (job #1113232) | Cod sursa (job #474580)
Cod sursa(job #474580)
#include <fstream>
using namespace std;
int a[5001],urm[5001],poz[5001],n,j,sir[5001],afisare,maxim,start[5001];
bool cmp(int x,int y)
{
return(x<y);
}
int binary(int val)
{
int i,step;
for(step=1;step<=n;step<<=1);
for(i=0;step;step>>=1)
if((a[i+step]<=val)&&(i+step<=n)) i+=step;
return i;
}
int main()
{
int i,x;
ifstream fi("secv.in");
ofstream fo("secv.out");
fi>>n;
for(i=1;i<=n;i++) fi>>a[i];
memcpy(sir,a,sizeof(a));
sort(a+1,a+n+1,cmp);
poz[1]=1;
for(i=2;i<=n;i++)
if(a[i]!=a[i-1]) poz[i]=poz[i-1]+1; else poz[i]=poz[i-1];
//fiecare element din sirul sortat are un nr de ordine
//pentru a stabili ordinea numerelor din subsir
for(i=1;i<=n;i++)
{
x=binary(sir[i]);
urm[i]=poz[x];
}
maxim=0;
for(i=1;i<=n;i++)
{
if(urm[i]==1) start[i]=i;
if(start[i]!=0)
for(j=i+1;j<=n;j++)
if((urm[j]==urm[i]+1)&&(start[i]>start[j])) start[j]=start[i];
if((maxim<start[i])&&(urm[i]==poz[n])) { maxim=start[i]; afisare=i-start[i]+1; }
}
if(afisare!=0)
fo<<afisare<<"\n"; else fo<<"-1\n";
fo.close();
return 0;
}