Pagini recente » Cod sursa (job #2416684) | Cod sursa (job #75280) | Cod sursa (job #1508567) | Cod sursa (job #2754648) | Cod sursa (job #1704634)
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
int ls,ld,a,n,v[100],tip,val;
int cautBin0 (int ls, int ld, int val) // 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
{
int mid;
while (ls <= ld) {
mid = (ls + ld) / 2;
if (v[mid] <= val)
ls = mid + 1;
else
ld = mid - 1;
}
mid = (ls + ld) / 2;
if (v[mid] > val) mid --;
if (v[mid] == val)
return mid;
return -1;
}
int cautBin1 (int ls, int ld, int val) //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
{
int mid;
while (ls <= ld)
{
mid = (ls+ld)/2;
if(v[mid] <= val)
ls=mid+1;
else
ld = mid;
}
mid = (ls+ld)/2;
if(v[mid] > val)
mid--;
if(v[mid] == val)
return mid;
return -1;
}
int cautBin2 (int ls, int ld, int val) //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 mid;
while(ls <= ld)
{
mid = (ls + ld)/2;
if(v[mid] >= val)
ld=mid-1;
else
ls=mid+1;
}
mid = (ls+ls)/2;
if(v[mid] < val)
mid++;
return mid;
return -1;
}
int main ()
{ int x;
freopen("cautbin.in","r",stdin);
freopen("cautbin.out","w",stdout);
scanf("%d", &n);
for (int i = 1; i <= n; ++ i)
scanf("%d", &v[i]);
scanf("&d", &x);
printf("%d\n%d\n", n, x);
while(x -- )
{
scanf("%d%d", &tip, &val);
if(tip == 0)
printf("%d\n", cautBin0(1,n,val));
if(tip == 1)
printf("%d\n", cautBin1(1,n,val));
if(tip == 2)
printf("%d\n", cautBin2(1,n,val));
}
return 0;
}