Cod sursa(job #798516)
Utilizator | Data | 16 octombrie 2012 18:38:49 | |
---|---|---|---|
Problema | Cautare binara | Scor | 0 |
Compilator | cpp | Status | done |
Runda | Arhiva educationala | Marime | 3.03 kb |
#include<fstream>
using namespace std;
int a[100], n,i,j,ls,li=1,mij,aux=0,x,y,gasit=0,M;
ifstream cin("cautbin.in");
ofstream cout("cautbin.out");
int catbin0(int nr)
{ gasit=0;
while(li<=ls&&!gasit)
{ mij=(li+ls)/2;
if(a[mij]>nr)
li=mij;
else if(a[mij]<nr)li=mij;
else
gasit=1;
}
if (gasit==1) {while(a[mij+1]==nr) mij++;return mij;}
else return -1;
}
int catbin1(int nr)
{ gasit=0;
while(li<=ls&&!gasit)
{ mij=(li+ls)/2;
if(a[mij]>nr)
li=mij;
else if(a[mij]<nr)li=mij;
else
gasit=1;
}
if(gasit=1)
return mij;
else catbin1(nr--);
}
int catbin2(int nr)
{ gasit=0;
while(li<=ls&&!gasit)
{ mij=(li+ls)/2;
if(a[mij]>nr)
li=mij;
else if(a[mij]<nr)li=mij;
else
gasit=1;
}
if(gasit=1)
return mij;
else catbin1(nr++);
}
/*0 x - cea mai mare pozitie pe care se afla un element cu valoarea x sau -1 daca aceasta valoare nu se gaseste in sir
1 x - cea mai mare pozitie pe care se afla un element cu valoarea mai mica sau egala cu x in sir. Se garanteaza ca cel mai mic numar al sirului este mai mic sau egal decat x
2 x - cea mai mica pozitie pe care se afla un element cu valoarea mai mare sau egala cu x in sir. Se garanteaza ca cel mai mare numar din sir este mai mare sau egal decat x*/
int main()
{
cin>>n;ls=n;
for(i=1;i<=n;i++)cin>>a[i];
for(i=1;i<=n;i++)
for(j=1;j<n;j++)
if(a[i]>a[j])
aux=a[i],a[i]=a[j],a[j]=aux;
cin>>M;
while(M!=0)
{ cin>>x>>y;
if(x==0)
cout<< catbin0(y);
if(x==1)
cout<< catbin1(y);
if(x==2)
cout<< catbin2(y);
M--;
}
return 0;
}