Cod sursa(job #916399)
Utilizator | Data | 16 martie 2013 14:20:21 | |
---|---|---|---|
Problema | Cautare binara | Scor | 0 |
Compilator | cpp | Status | done |
Runda | Arhiva educationala | Marime | 2.79 kb |
#include <fstream>
using namespace std;
ifstream f("cautbin.in");
ofstream g("cautbin.out");
int t;
long a[100001], n, m, i, k;
long binarySearch0(long a[], long p, long q, long k)
{
long m = (p + q)/2;
if(a[m] < k)
{
return binarySearch0(a, p, m - 1, k);
}
else
if(a[m] > k)
{
return binarySearch0(a, m + 1, q, k);
}
else
{
if(a[m + 1] == k)
return binarySearch0(a, m + 1, q, k);
else
return m;
}
}
long binarySearch1(long a[], long p, long q, long k)
{
long m = (p + q)/2;
if(a[m] <= k)
{
if(a[m + 1] > k)
return m;
else
return binarySearch1(a, m + 1, q, k);
}
else
if(a[m] > k)
{
if(a[m - 1] < k)
return m - 1;
else
return binarySearch1(a, p, m - 1, k);
}
}
long binarySearch2(long a[], long p, long q, long k)
{
long m = (p + q)/2;
if(a[m] < k)
{
if(a[m + 1] > k)
return m + 1;
else
return binarySearch2(a, m + 1, q, k);
}
else
if(a[m] > k)
{
if(a[m - 1] < k)
return m;
else
return binarySearch2(a, p, m - 1, k);
}
else
{
if(a[m - 1] == k)
return binarySearch2(a, p, m - 1, k);
return m;
}
}
int main()
{
f >> n;
for(i = 1; i <= n; i++)
f >> a[i];
f >> m;
for(i = 1; i <= m; i++)
{
f >> t >> k;
switch(t)
{
case 0:
{
g << binarySearch0(a, 1, n, k) << "\n";
break;
}
case 1:
{
g << binarySearch1(a, 1, n, k) << "\n";
break;
}
case 2:
{
g << binarySearch2(a, 1, n, k) << "\n";
break;
}
}
}
return 0;
}