Pagini recente » Cod sursa (job #1458730) | Cod sursa (job #442302) | Cod sursa (job #3172449) | Rating m4iladress (m4iladress) | Cod sursa (job #1826728)
#include <fstream>
using namespace std;
ifstream f("cautbin.in");
ofstream g("cautbin.out");
int n, v[100002];
int CautBin0(int x)
{
int lo = 1, hi = n, mid;
while(lo <= hi)
{
mid = lo + (hi - lo) / 2;
if(x > v[mid])
lo = mid + 1;
else if(x < v[mid])
hi = mid - 1;
else
{
while(v[mid] == v[mid + 1])
mid++;
return mid;
}
}
return -1;
}
int CautBin1(int x)
{
int lo = 1, hi = n, mid;
while(lo <= hi)
{
mid = lo + (hi - lo) / 2;
if(x > v[mid])
lo = mid + 1;
else if(x < v[mid])
hi = mid - 1;
else
{
while(v[mid] == v[mid + 1])
mid++;
return mid;
}
}
return hi;
}
int CautBin2(int x)
{
int lo = 1, hi = n, mid;
while(lo <= hi)
{
mid = lo + (hi - lo) / 2;
if(x > v[mid])
lo = mid + 1;
else if(x < v[mid])
hi = mid - 1;
else
{
while(v[mid] == v[mid - 1])
mid--;
return mid;
}
}
return lo;
}
int main()
{
int i, m, a, b;
f >> n;
for(i = 1; i < n + 1; i++)
f >> v[i];
f >> m;
for(i = 0; i < m; i++)
{
f >> a >> b;
if(a == 0)
g << CautBin0(b) << "\n";
else if(a == 1)
g << CautBin1(b) << "\n";
else
g << CautBin2(b) << "\n";
}
return 0;
}