Pagini recente » Cod sursa (job #3236929) | Cod sursa (job #340358) | Cod sursa (job #888578) | Cod sursa (job #3033298) | Cod sursa (job #1598920)
// Day5V2.cpp : Defines the entry point for the console application.
//
#include <iostream>
#include <fstream>
using namespace std;
ifstream f("cautbin.in");
ofstream g("cautbit.out");
int a[100],n;
int BinZero(int value);
int BinOne(int value);
int BinTwo(int value);
void citire() {
int nr;
f >> n;
for (int i = 1; i <= n; ++i) {
f >> nr;
a[i] = nr;
}
int tip, value, nrFunc;
f >> nrFunc;
for (int i = 0; i < nrFunc; ++i) {
f >> tip >> value;
switch (tip)
{
case 0:
g << BinZero(value) <<"\n";
break;
case 1:
g << BinOne(value) <<"\n";
break;
case 2:
g << BinTwo(value) <<"\n";
break;
default:
break;
}
}
}
int BinZero(int value) {
int low = 1, high = n,mid = (low+high)/2,j;
bool ok = true;
while (ok) {
if (a[mid] == value) {
j = mid + 1;
while (value == a[j]) {
++j;
}
return j-1 ;
ok = false;
}
if (a[mid] < value) {
low = mid + 1;
mid = (low + high) / 2;
}
if (a[mid] > value) {
high = mid - 1;
mid = (low + high) / 2;
}
if (low == mid || high == mid)
ok = false;
}
return -1;
}
int BinOne(int value) {
int low = 1, high = n, mid = (low + high) / 2, j;
bool ok = true,ok2 = true;
while (ok2) {
if (ok == false) {
ok = true;
value = value - 1;
}
while (ok) {
if (a[mid] == value) {
j = mid + 1;
while (value == a[j]) {
++j;
}
return j-1;
ok = false;
}
if (a[mid] < value) {
low = mid + 1;
mid = (low + high) / 2;
}
if (a[mid] > value) {
high = mid - 1;
mid = (low + high) / 2;
}
if (low == mid || high == mid)
ok = false;
}
}
return -1;
}
int BinTwo(int value) {
int low = 1, high = n, mid = (low + high) / 2, j;
bool ok = true,ok2 = true;
while (ok2) {
if (ok == false) {
ok = true;
value = value + 1;
}
while (ok) {
if (a[mid] == value) {
j = mid - 1;
while (value == a[j]) {
--j;
}
return j+1;
ok = false;
}
if (a[mid] < value) {
low = mid + 1;
mid = (low + high) / 2;
}
if (a[mid] > value) {
high = mid - 1;
mid = (low + high) / 2;
}
if (low == mid || high == mid)
ok = false;
}
}
return -1;
}
int main() {
citire();
return 0;
}