Pagini recente » Cod sursa (job #347766) | Cod sursa (job #165968) | Cod sursa (job #1463469) | Cod sursa (job #2557079) | Cod sursa (job #2714749)
#include<iostream>
#include<fstream>
#include<vector>
using namespace std;
int binarySearch1(vector<int>&v, int value, int task) {
int step, pos, length;
pos = -1, step = 1;
length = v.size();
while((step << 1) <= length)
step <<= 1;
while(step > 0) {
if(pos + step < length && v[pos + step] <= value)
pos += step;
step >>= 1;
}
if(!task) {
if(pos != -1 && v[pos] == value)
return (1 + pos);
else
return -1;
}
else
return (1 + pos);
}
int binarySearch2(vector<int>& v, int value, int task) {
int step, pos, length;
pos = v.size(), step = 1;
length = v.size();
while((step << 1) <= length)
step <<= 1;
while(step > 0) {
if(pos - step >= 0 && v[pos - step] >= value)
pos -= step;
step >>= 1;
}
return (1 + pos);
}
int main() {
vector<int> v;
int n, m, x, task;
ifstream fin("cautbin.in");
ofstream fout("cautbin.out");
fin >> n;
v.resize(n);
for(int i = 0; i < n; ++i) {
fin >> x;
v[i] = x;
}
fin >> m;
for(int i = 0; i < m; ++i) {
fin >> task >> x;
if(task < 2)
fout << binarySearch1(v, x, task) << "\n";
else
fout << binarySearch2(v, x, task) << "\n";
}
fin.close();
fout.close();
return 0;
}