Cod sursa(job #1117597)
Utilizator | Data | 23 februarie 2014 17:51:09 | |
---|---|---|---|
Problema | Cautare binara | Scor | 60 |
Compilator | cpp | Status | done |
Runda | Arhiva educationala | Marime | 1.75 kb |
#include<fstream>
using namespace std;
int v[1000000],q[1000000];
int main()
{
ifstream f ("cautbin.in");
ofstream g ("cautbin.out");
int x,n, i, j, left, right, mid, res,m;
f >> n;
for (i=1; i<=n; i++) f >> v[i];
f >> m;
for (j=1; j<=m; j++)
{
f >> q[j];
f >> x;
if (q[j] == 0)
{
res = -1;
right = n;
left = 1;
while (left <= right)
{
mid = (left+right) / 2;
if (v[mid] == x)
{
res = mid;
left = mid + 1;
}
if (v[mid] < x) left = mid + 1;
if (v[mid] > x) right = mid - 1;
}
g << res << "\n";
}
res=-1;
left = 1;
right = n;
if (q[j] == 1)
{
while (left <= right)
{
mid = (left+right)/2;
if (v[mid] <= x )
{
left = mid + 1;
res = mid ;
}
if (v[mid] > x)
right = mid - 1;
}
g << res << "\n";
}
res=-1;
left = 1;
right = n;
if (q[j] == 2)
{
while (left <= right)
{
mid = (left+right)/2;
if (v[mid] >= x )
{
right = mid - 1;
res = mid;
}
if (v[mid] < x)
{
left = mid + 1;
}
}
g << res << "\n";
}
}
return 0;
}