Pagini recente » Cod sursa (job #1791674) | Cod sursa (job #1377385) | Cod sursa (job #452458) | Cod sursa (job #2658766) | Cod sursa (job #1926528)
#include <iostream>
#include <fstream>
using namespace std;
int n, m, cod;
int a[100005];
int bs1(int x)
{
int poz = -1, st = 1, dr = n;
while(st <= dr)
{
int m = st + (dr - st)/2;
if(a[m] == x) poz = m, st = m + 1;
if(a[m] < x) st = m + 1;
if(a[m] > x) dr = m - 1;
}
return poz;
}
int bs2(int x)
{
int poz = 1, st = 1, dr = n;
while(st <= dr)
{
int m = st + (dr - st)/2;
if(a[m] <= x) poz = m, st = m+1;
else dr = m-1;
}
return poz;
}
int bs3(int x)
{
int poz = n, st = 1, dr = n;
while(st <= dr)
{
int m = st + (dr - st)/2;
if(a[m] >= x) poz = m, dr = m-1;
else st = m + 1;
}
return poz;
}
void read()
{
int x;
ifstream f("cautbin.in");
ofstream g("cautbin.out");
f >> n;
for(int i=1; i<=n; ++i)
f >> a[i];
f >> m;
for(int i=0; i<m; ++i)
{
f >> cod >> x;
if(cod == 0)
g << bs1(x) << '\n';
if(cod == 1)
g << bs2(x) << '\n';
if(cod == 2)
g << bs3(x) << '\n';
}
f.close();
g.close();
}
int main()
{
read();
return 0;
}