Cod sursa(job #2609891)
Utilizator | Data | 3 mai 2020 19:24:04 | |
---|---|---|---|
Problema | Cautare binara | Scor | 0 |
Compilator | cpp-64 | Status | done |
Runda | Arhiva educationala | Marime | 3.67 kb |
#include <iostream>
#include <fstream>
using namespace std;
int main(){
ifstream f("cautbin.in");
ofstream g("cautbin.out");
int n, array[100001];
f >> n;
for(int i = 0; i < n; ++i ){
f >> array[i];
}
int m;
f >> m;
int key, elem;
for(int i = 0; i < m; ++i ){
f >> key >> elem;
if ( key == 0 ){
int st = 0;
int dr = n - 1;
int sol = -2;
while (st <= dr){
int mid = ( st + dr ) / 2;
if ( elem < array[mid])
dr = mid - 1;
else
if ( elem > array[mid])
st = mid + 1;
else{
if ( mid == n - 1)
{
if ( elem == mid )
{
sol = mid;
break;
}
}
else{
if ( elem == mid && array[mid + 1] != elem)
{
sol = mid;
break;
}
else{
st = mid + 1;
}
}
}
}
g << sol + 1<< "\n";
}
if ( key == 1 ){
int st = 0;
int dr = n - 1;
int sol = -2;
while (st <= dr){
int mid = ( st + dr ) / 2;
if ( elem < array[mid])
dr = mid - 1;
else
if ( elem > array[mid])
{
sol = st;
st = mid + 1;
}
else{
if ( mid == n - 1)
{
if ( elem == mid )
{
sol = mid;
break;
}
}
else{
if ( elem == mid && array[mid + 1] != elem)
{
sol = mid;
break;
}
else{
sol = st;
st = mid + 1;
}
}
}
}
g << sol + 1<< "\n";
}
if ( key == 2 ){
int st = 0;
int dr = n - 1;
int sol = -2;
while (st <= dr){
int mid = ( st + dr ) / 2;
if ( elem < array[mid])
sol = dr,
dr = mid - 1;
else
if ( elem > array[mid])
{
st = mid + 1;
}
else{
if ( mid == n - 1)
{
if ( elem == mid )
{
sol = mid;
break;
}
}
else{
if ( elem == mid && array[mid -1] != elem)
{
sol = mid;
break;
}
else{
sol = dr;
dr = mid - 1;
}
}
}
}
g << sol + 1<< "\n";
}
}
return 0;
}