Pagini recente » Cod sursa (job #1669234) | Cod sursa (job #1652067) | Cod sursa (job #2807201) | Cod sursa (job #1634699) | Cod sursa (job #2220500)
#include <iostream>
#include <fstream>
using namespace std;
ifstream in("cautbin.in");
ofstream out("cautbin.out");
int n, vec[100100], m, a, argument;
int cautare_binara1(int st, int dr, int x){
int m;
while(st <= dr){
m = (st+dr)/2;
if(vec[m] <= x)
st = m + 1;
else
dr = m - 1;
}
m = (st+dr)/2;
if(vec[m]>x) m--;
if(vec[m]==x) return m;
return -1;
}
int cautare_binara2(int st, int dr, int x){
int m;
while(st<dr){
m = (st+dr)/2;
if(vec[m]<=x)
st = m+1;
else dr = m;
}
m = (st+dr)/2;
if(vec[m] > x) --m;
return m;
}
int cautare_binara3(int st, int dr, int x){
int m;
while(st < dr){
m = (st+dr)/2;
if(vec[m]<x)
st = m + 1;
else
dr = m;
}
m = (st+dr)/2;
if(vec[m] < x)
++m;
return m;
}
void raspuns(int intrebare, int argument){
if(intrebare == 0){
out<<cautare_binara1(1, n, argument)<<endl;
}
else
if(intrebare == 1){
out<<cautare_binara2(1, n, argument)<<endl;
}
else
if(intrebare == 2){
out<<cautare_binara3(1, n, argument)<<endl;
}
}
int main()
{
in>>n;
for(int i=1; i<=n; i++){
in>>vec[i];
}
in>>m;
for(int i=1; i<=m; i++){
in>>a>>argument;
raspuns(a, argument);
}
return 0;
}