Cod sursa(job #2664093)
Utilizator | Data | 27 octombrie 2020 21:59:22 | |
---|---|---|---|
Problema | Cautare binara | Scor | 100 |
Compilator | cpp-64 | Status | done |
Runda | Arhiva educationala | Marime | 1.75 kb |
#include <fstream>
using namespace std;
ifstream f("cautbin.in");
ofstream g("cautbin.out");
int N, v[100005], M, t, x;
void citire(int &n, int v[])
{
f >> n;
for(int i = 1; i <= n; ++ i)
f >> v[i];
}
int main()
{
citire(N, v);
f >> M;
for(int i = 1; i <= M; ++ i)
{
f >> t >> x;
int st = 1, dr = N;
bool ok = 0;
switch(t)
{
case 0:
while(st <= dr)
{
int mid = (st + dr) / 2;
if(v[mid] == x)
ok = 1;
if(v[mid] <= x)
st = mid + 1;
else
dr = mid - 1;
}
g << (ok ? dr : -1) << '\n';
break;
case 1:
while(st <= dr)
{
int mid = (st + dr) / 2;
if(v[mid] == x)
ok = 1;
if(v[mid] <= x)
st = mid + 1;
else
dr = mid - 1;
}
g << dr << '\n';
break;
case 2:
while(st <= dr)
{
int mid = (st + dr) / 2;
if(v[mid] == x)
ok = 1;
if(v[mid] < x)
st = mid + 1;
else
dr = mid - 1;
}
g << st << '\n';
break;
default:
break;
}
}
f.close();
g.close();
return 0;
}