Pagini recente » Cod sursa (job #2838850) | Cod sursa (job #1091903) | Cod sursa (job #98783) | Cod sursa (job #1107382) | Cod sursa (job #973439)
Cod sursa(job #973439)
#include <fstream>
int absearch(int *a, int l, int r, int caut)
{
int m;
while(l <= r)
{
m = l + (r - l) / 2;
if(a[m] <= caut)
l = m + 1;
else
r = m - 1;
}
m = l + (r - l) / 2;
if(a[m] > caut) m--;
if(a[m] == caut) return m;
return -1;
}
int bbsearch(int *a, int l, int r, int caut)
{
int m;
while(l < r)
{
m = l + (r - l) / 2;
if(a[m] <= caut)
l = m + 1;
else
r = m;
}
m = l + (r - 1) / 2;
if(a[m] > caut) m--;
return m;
}
int cbsearch(int *a, int l, int r, int caut)
{
int m;
while(l < r)
{
m = l + (r - l) / 2;
if(a[m] < caut)
l = m + 1;
else
r = m;
}
m = l + (r - l) / 2;
if(a[m] < caut) m++;
return m;
}
int main(void)
{
int nV, nM, *nA, a, b;
std::ifstream in("cautbin.in");
std::ofstream out("cautbin.out");
in >> nV;
nA = new int[nV];
for(int i(0); i < nV; i++)
in >> nA[i];
in >> nM;
for(int i(0); i < nM; i++)
{
in >> a >> b;
if(a == 0) out << absearch(nA, 0, nV - 1, b) << "\n";
if(a == 1) out << bbsearch(nA, 0, nV - 1, b) << "\n";
if(a == 2) out << cbsearch(nA, 0, nV - 1, b) << "\n";
}
return 0;
}