Pagini recente » Cod sursa (job #369846) | Cod sursa (job #1076690) | Cod sursa (job #2873513) | Cod sursa (job #2902269) | Cod sursa (job #1873052)
#include <iostream>
#include <fstream>
using namespace std;
int N, M, j;
int i, nr, x, v[100], c, st, dr, mid;
int main () {
ifstream fin("cautbin.in");
ofstream fout("cautbin.out");
fin >> N;
for (i = 1; i <= N; i++) fin >> v[i];
fin >> M;
for (i = 1; i <= M; i++)
{
fin >> c >> x;
st = 1; dr = N;
if (c == 0)
{
bool gasit = false;
while (st <= dr && gasit == false)
{
mid = st + (dr-st)/2;
if (mid == x) gasit = true;
if (mid < x) st = mid+1;
else if (mid > x) dr = mid-1;
}
if (gasit == true)
{
st = 1; dr = N;
while (st <= dr)
{
mid = st + (dr-st) / 2;
if (v[mid] <= x) st = mid+1;
else if (v[mid] > x) dr = mid-1;
if (v[mid+1] != x && v[mid] == x) { st = dr+1; cout << mid << "\n"; }
}
}
else cout << -1 << "\n";
st = 1; dr = N;
}
if (c == 1)
{
while (st <= dr)
{
mid = st + (dr-st) / 2;
if (v[mid] <= x) st = mid+1;
if (v[mid] > x) dr = mid-1;
if (v[mid+1] > x || mid == N) { st = dr+1; cout << mid << "\n"; }
cout << mid << "\n";
}
}
if (c == 2)
{
while (st <= dr)
{
mid = st + (dr-st) / 2;
if (v[mid] > x) dr = mid-1;
else if (v[mid+1] <= x) st = mid+1;
if ((v[mid] <= x && v[mid+1] > x) || mid == N || mid == 1) { st = dr+1; cout << mid << "\n"; }
}
}
}
}
/*
0 x - cea mai mare pozitie pe care se afla un element cu valoarea x sau -1 daca aceasta valoare nu se gaseste in sir
1 x - cea mai mare pozitie pe care se afla un element cu valoarea mai mica sau egala cu x in sir. Se garanteaza ca cel mai mic numar al sirului este mai mic sau egal decat x
2 x - cea mai mica pozitie pe care se afla un element cu valoarea mai mare sau egala cu x in sir. Se garanteaza ca cel mai mare numar din sir este mai mare sau egal decat x */