Pagini recente » Cod sursa (job #1109407) | Cod sursa (job #2737837) | Cod sursa (job #1945102) | Cod sursa (job #725361) | Cod sursa (job #2623363)
#include <iostream>
#include <bits/stdc++.h>
#include <fstream>
using namespace std;
ifstream fin("cautbin.in");
ofstream fout("cautbin.out");
int v[100001];
int cautareBinara0(int stg, int dr, int val) {
int mid;
while (stg <= dr) {
mid = (stg+dr)/2;
if (v[mid] <= val)
stg = mid + 1;
else
dr = mid - 1;
}
mid = (stg+dr)/2;
if (v[mid] > val) mid--;
if (v[mid] == val)
return mid;
return -1;
}
int cautareBinara1(int stg, int dr, int val) {
int mid;
while (stg < dr){
mid = (stg+dr)/2;
if (v[mid] <= val)
stg = mid + 1;
else
dr = mid - 1;
}
mid = (stg+dr)/2;
if (v[mid] > val)
mid--;
return mid;
}
int cautareBinara2(int stg, int dr, int val) {
int mid;
while (stg < dr) {
mid = stg + (dr-stg)/2;
if (v[mid] < val)
stg = mid + 1;
else
dr = mid - 1;
}
mid = (stg+dr)/2;
if (v[mid] < val)
mid++;
return mid;
}
int main () {
int m, tip, x, n;
fin>>n;
for (int i = 1; i <= n; ++ i)
fin>>v[i];
fin>>m;
for(int i=1;i<=m;i++){
fin>>tip;
fin>>x;
if (tip == 0)
fout<<cautareBinara0(1,n,x)<<'\n';
if (tip == 1)
fout<<cautareBinara1(1,n,x)<<'\n';
if (tip == 2)
fout<<cautareBinara2(1,n,x)<<'\n';
}
return 0;
}