Pagini recente » Cod sursa (job #2149063) | Cod sursa (job #1631514) | Cod sursa (job #35521) | Cod sursa (job #393419) | Cod sursa (job #2035239)
#include <fstream>
using namespace std;
int a[100010];
int CautareBinara1(int l,int r,int val);
int CautareBinara2(int l,int r,int val);
int CautareBinara3(int l,int r,int val);
int main()
{
int n,m,tip,val;
ifstream fin("cautbin.in");
ofstream fout("cautbin.out");
fin >> n;
for(int i = 1; i <= n; i++)
fin >> a[i];
fin >> m;
for(int i = 0; i < m; i++)
{
fin >> tip >> val;
if(tip == 0)
fout << CautareBinara1(1,n,val) << '\n';
if(tip == 1)
fout << CautareBinara2(1,n,val) << '\n';
if(tip == 2)
fout << CautareBinara3(1,n,val) << '\n';
}
}
int CautareBinara1(int l,int r,int val)
{
int m;
while(l <= r)
{
m = (l + r) / 2;
if(a[m] <= val)
l = m + 1;
else
r = m - 1;
}
m = (l + r) / 2;
if(a[m] > val)
m--;
if(a[m] == val)
return m;
return -1;
}
int CautareBinara2(int l,int r,int val)
{
int m, n = l;
while (l < r){
m = (l + r) / 2;
if (a[m] <= val)
l = m + 1;
else
r = m;
}
m = (l + r) / 2;
if (a[m] > val)
-- m;
return m;
}
int CautareBinara3(int l,int r,int val)
{
int m;
while (l < r) {
m = (l + r) / 2;
if (a[m] < val)
l = m + 1;
else
r = m;
}
m = (l + r) / 2;
if (a[m] > val)
-- m;
return m;
}