Pagini recente » Cod sursa (job #1486826) | Cod sursa (job #818140) | Cod sursa (job #2662917)
#include <fstream>
using namespace std;
ifstream fin("cautbin.in");
ofstream fout("cautbin.out");
int n, m;
int sir[100000];
int cerinta[100000], x[100000];
int caut_bin_0(int lm, int y)
{
int i;
for(i = 0; lm > 0; (lm>>=1))
if(i + lm < n && sir[i+lm] == y)
i = i + lm;
return (sir[i] == y)? i+1:-1;
}
int caut_bin_1(int lm, int y)
{
int i;
for(i = 0; lm > 0; (lm>>=1))
if(i + lm < n && sir[i+lm] <= y)
i = i + lm;
return (sir[i] == y)? i+1:-1;
}
int caut_bin_2(int lm, int y)
{
int i;
for(i = 0; lm > 0; (lm>>=1))
if(i + lm < n && sir[i + lm] < y)
i = i + lm;
i++;
return (sir[i] == y)? i+1:-1;
}
void initializare_lm(int &lm)
{
int copie_nr = n;
while(copie_nr > lm)
lm<<=1;
}
void citire()
{
fin >> n;
for(int i = 0; i < n; i++)
fin >> sir[i];
fin >> m;
for(int i = 0; i < m; i++)
fin >> cerinta[i] >> x[i];
}
void rezolvare(int lm)
{
for(int i = 0; i < m; i++)
switch(cerinta[i])
{
case 0:
fout << caut_bin_0(lm, x[i]) << '\n';
break;
case 1:
fout << caut_bin_1(lm, x[i]) << '\n';
break;
case 2:
fout << caut_bin_2(lm, x[i]) << '\n';
break;
}
}
int main()
{
citire();
int lm = 1;
initializare_lm(lm);
rezolvare(lm);
return 0;
}