Mai intai trebuie sa te autentifici.
Cod sursa(job #957897)
Utilizator | Data | 6 iunie 2013 13:03:30 | |
---|---|---|---|
Problema | Cautare binara | Scor | 0 |
Compilator | cpp | Status | done |
Runda | Arhiva educationala | Marime | 1.76 kb |
#include <iostream>
#include <fstream>
using namespace std;
ifstream f("cautbin.in");
ofstream g("cautbin.out");
int n, a[100000];
int cautbin0(int x){
int st = 1;
int dr = n;
int middle;
while (st <= dr) {
middle = (st + dr) / 2;
if (a[middle] <= x)
st = middle + 1;
else
dr = middle - 1;
}
middle = (st + dr) / 2;
if (a[middle] > x) middle--;
if (a[middle] == x)
return middle;
return -1;
}
int cautbin1(int x){
int st = 1;
int dr = n;
int middle;
while (st <= dr) {
middle = (st + dr) / 2;
if (a[middle] <= x)
st = middle + 1;
else
dr = middle - 1;
}
middle = (st + dr) / 2;
if (a[middle + 1] == a[middle]) middle++;
return middle;
}
int cautbin2(int x){
int st = 1;
int dr = n;
int middle;
while (st <= dr) {
middle = (st + dr) / 2;
if (a[middle] <= x)
st = middle + 1;
else
dr = middle - 1;
}
middle = (st + dr) / 2;
while (a[middle - 1] == a[middle]) middle--;
return middle;
}
int m;
int main()
{
f >> n;
for(int i = 1; i <= n; i++)
f >> a[i];
f >> m;
for(int i = 1; i <= m; i++)
{
int key;
f >> key;
int x;
f >> x;
switch(key)
{
case 0:
g << cautbin0(x) << endl;
break;
case 1:
g << cautbin1(x) << endl;
break;
case 2:
g << cautbin2(x) << endl;
break;
}
}
f.close();
g.close();
return 0;
}