Cod sursa(job #1691257)
Utilizator | Data | 17 aprilie 2016 17:41:16 | |
---|---|---|---|
Problema | Cautare binara | Scor | 40 |
Compilator | cpp | Status | done |
Runda | Arhiva educationala | Marime | 1.89 kb |
#include <iostream>
#include <fstream>
using namespace std;
ifstream f("cautbin.in");
ofstream g("cautbin.out");
unsigned int n, m, v[100001], i, x, p, lt, rt, mid;
int found;
int main()
{
f >> n;
for(i = 1; i <= n; i++)
f >> v[i];
f >> m;
for(i = 1; i <= m; i++)
{
f >> p >> x;
lt = 0;
rt = n;
found = -1;
while(lt <= rt)
{
mid = lt + (rt-lt)/2;
if(p == 0)
{
if(v[mid] == x)
{
while(v[mid+1] == x)
mid++;
found = mid;
break;
}
else if(v[mid] < x)
lt = mid+1;
else if(v[mid] > x)
rt = mid-1;
}
else if(p == 1)
{
if(v[mid] <= x)
{
while(v[mid+1] <= x && mid < n)
mid++;
found = mid;
break;
}
/*else if(v[mid] < x)
lt = mid+1;*/
else if(v[mid] > x)
rt = mid-1;
}
else if(p == 2)
{
if(v[mid] >= x)
{
while(v[mid-1] >= x)
mid--;
found = mid;
break;
}
else if(v[mid] < x)
lt = mid+1;
else if(v[mid] > x)
rt = mid-1;
}
//}
}
if(found == -1)
g << -1 << "\n";
else
g << found << "\n";
}
f.close();
g.close();
}