Pagini recente » Cod sursa (job #975583) | Cod sursa (job #915602) | Cod sursa (job #1445509) | Cod sursa (job #212187) | Cod sursa (job #546368)
Cod sursa(job #546368)
// ba desteptule! cautarea binara functioneaza numai pentru un vector sortat crescator.!
#include <fstream>
#include <iostream>
using namespace std;
int n, a[5002], m, b[5002];
int CautareBinara (int x)
{
int st=0, dr=m-1, mij, poz=-1;
while (st<=dr && poz==-1)
{
mij=(st+dr)/2;
if (b[mij]==x)
poz=mij;
else
if (b[mij]>x)
dr=mij-1;
else
st=mij+1;
}
return poz;
}
/*
inline bool cmp (const Pozitii A, const Pozitii B)
{
return A.nr<B.nr;
}
*/
int main ()
{
ifstream f ("secv.in");
f>>n;
int i, k=0, x;
f>>a[0];
b[0]=a[0];
m++;
for (i=1; i<n; i++)
{
f>>a[i];
if (a[i]>b[k])
{
b[++k]=a[i];
m++;
}
else
{
x=CautareBinara (a[i]);
if (x==-1)
{
k++;
m++;
b[k]=a[i];
}
else;
sort (b, b+m);
}
}
f.close ();
int ok=0;
for (i=0; i<n && a[i]!=b[0]; i++);
k=1;
int l=1, lmax=0;
for (i++; i<n; i++)
{
l++;
if (a[i]==b[k])
{
k++;
if (k==m)
{
ok=1;
if (l>lmax)
lmax=l;
l=1;
k=0;
}
}
else
{
if (a[i]>b[k])
{
k=0;
l=0;
}
}
}
ofstream g ("secv.out");
if (ok==0)
cout<<-1<<"\n";
else
cout<<lmax<<"\n";
g.close();
return 0;
}