Pagini recente » Cod sursa (job #1301153) | Cod sursa (job #296072) | Cod sursa (job #1793652) | Cod sursa (job #804372) | Cod sursa (job #973445)
Cod sursa(job #973445)
#include <fstream>
int absearch(int *a, int l, int r, int caut)
{
int m;
while(l <= r)
{
m = (r + l) / 2;
if(a[m] <= caut)
l = m + 1;
else
r = m - 1;
}
m = (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 = (r + l) / 2;
if(a[m] <= caut)
l = m + 1;
else
r = m;
}
m = (r + l) / 2;
if(a[m] > caut) m--;
return m;
}
int cbsearch(int *a, int l, int r, int caut)
{
int m;
while(l < r)
{
m = (r + l) / 2;
if(a[m] < caut)
l = m + 1;
else
r = m;
}
m = (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) + 1 << "\n";
if(a == 1) out << bbsearch(nA, 0, nV - 1, b) + 1 << "\n";
if(a == 2) out << cbsearch(nA, 0, nV - 1, b) + 1 << "\n";
}
return 0;
}