Cod sursa(job #1901658)
Utilizator | Data | 4 martie 2017 10:12:51 | |
---|---|---|---|
Problema | Cautare binara | Scor | 0 |
Compilator | cpp | Status | done |
Runda | Arhiva educationala | Marime | 2.32 kb |
#include <bits/stdc++.h>
using namespace std;
int n, i, m, x, y, lft, rght, mddle, j, poz, v[100000];
int main()
{
ifstream in ("cautbin.in");
ofstream out ("cautbin.out");
in >> n;
for(i = 1; i <= n; ++i)
in >> v[i];
in >> m;
for(i = 1; i <= m; ++i)
{
in >> y >> x;
if(y == 0)
{
lft = 1; rght = n;
while(lft <= rght)
{
mddle = (lft + rght) >> 1;
if(v[mddle] == x)
{
poz = mddle;
j = poz + 1;
while(v[j] == x)
{
++ j;
poz = j - 1;
}
out << poz << "\n";
break;
}
else if(v[mddle] > x)
rght = mddle - 1;
else
lft = mddle + 1;
}
}
else if(y == 1)
{
lft = 1; rght = n;
while(lft <= rght)
{
mddle = (lft + rght) >> 1;
if(v[mddle] == x || v[mddle] < x)
{
poz = mddle;
j = poz + 1;
while(v[j] == x)
{
++ j;
poz = j - 1;
}
out << poz << "\n";
break;
}
else if(v[mddle] > x)
rght = mddle - 1;
}
}
else if(y == 2)
{
lft = 1; rght = n;
while(lft <= rght)
{
mddle = (lft + rght) >> 1;
if(v[mddle] == x || v[mddle] > x)
{
poz = mddle;
j = poz - 1;
while(v[j] == x)
{
--j;
poz = j + 1;
}
out << poz << "\n";
break;
}
else if(v[mddle] < x)
lft = mddle + 1;
}
}
}
in.close();
out.close();
return 0;
}