Pagini recente » Cod sursa (job #2966569) | Cod sursa (job #2361871) | Cod sursa (job #1350804) | Cod sursa (job #1649025) | Cod sursa (job #2612078)
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;
ifstream fin("cautbin.in");
ofstream fout("cautbin.out");
int N;
vector<int> v;
int binarySearch0(int k)
{
int st=0,dr=N-1,mij,pos=-1;
while(st<=dr) {
mij = st + (dr-st)/2;
if (v[mij] == k) {
pos = mij;
st = mij+1;
}
else if (v[mij] > k) {
dr = mij - 1;
}
else
st = mij + 1;
}
return pos;
}
int binarySearch1(int k)
{
int pos=-1,mij,st=0,dr=N-1;
while(st<=dr) {
mij = st + (dr-st)/2;
if (v[mij] <= k) {
pos = mij;
st = mij+1;
}
else
dr = mij - 1;
}
return pos;
}
int binarySearch2(int k)
{
int pos=-1,mij,st=0,dr=N-1;
while(st<=dr) {
mij = st + (dr-st)/2;
if (v[mij] >= k) {
pos = mij;
dr = mij-1;
}
else
st = mij + 1;
}
return pos;
}
int main()
{
int M,x,op,rez;
fin>>N;
for (int i=0; i<N; i++) {
fin>>x;
v.push_back(x);
}
fin>>M;
for (int i=0; i<M; i++) {
fin>>op>>x;
switch(op) {
case 0:
rez = binarySearch0(x);
fout<<rez+1<<'\n';
break;
case 1:
rez = binarySearch1(x);
fout<<rez+1<<'\n';
break;
case 2:
rez = binarySearch2(x);
fout<<rez+1<<'\n';
break;
}
}
return 0;
}