Pagini recente » Cod sursa (job #2939906) | Cod sursa (job #1046427) | Cod sursa (job #1629742) | Cod sursa (job #2862928) | Cod sursa (job #1838012)
#include <fstream>
using namespace std;
#define NMAX 100002
ifstream fin("cautbin.in");
ofstream fout("cautbin.out");
int (*func[3])(int x);
int N;
int v[NMAX];
int cautare0(int x) {
int st = 1, dr = N, poz = -1;
while (st <= dr) {
int mid = (st + ((dr - st) >> 1));
if (v[mid] == x)
poz = mid;
if (v[mid] <= x)
st = mid + 1;
else
dr = mid - 1;
}
return poz;
}
int cautare1(int x) {
int st = 1, dr = N, poz = -1;
while (st <= dr) {
int mid = (st + ((dr - st) >> 1));
if (v[mid] <= x) {
st = mid + 1;
poz = mid;
}
else
dr = mid - 1;
}
return poz;
}
int cautare2(int x) {
int st = 1, dr = N, poz = -1;
while (st <= dr) {
int mid = st + ((dr - st) >> 1);
if (v[mid] >= x) {
dr = mid - 1;
poz = mid;
}
else
st = mid + 1;
}
return poz;
}
int main() {
fin >> N;
for (int i = 1; i <= N; ++i)
fin >> v[i];
func[0] = cautare0;
func[1] = cautare1;
func[2] = cautare2;
int T;
fin >> T;
while (T--) {
int t, x;
fin >> t >> x;
fout << func[t](x) << "\n";
}
return 0;
}