Pagini recente » Cod sursa (job #1896284) | Cod sursa (job #2375932) | Rating Ionescu Rares-Mihai (IonescuRares) | Cod sursa (job #2276809) | Cod sursa (job #1823530)
#include <fstream>
using namespace std;
ifstream f("cautbin.in");
ofstream g("cautbin.out");
int n, v[100000];
int CautBin(int x)
{
int lo = 0, hi = n - 1, mid;
while(lo <= hi)
{
mid = lo + (hi - lo) / 2;
if(x > mid)
lo = mid + 1;
else if(x < mid)
hi = mid - 1;
else
return mid;
}
return -1;
}
int main()
{
int i, a, b, m;
f >> n;
for(i = 1; i < n + 1; i++)
f >> v[i];
f >> m;
for(i = 0; i < m; i++)
{
f >> a >> b;
switch(a)
{
case 0:
{
int c = CautBin(b);
if(c == -1)
g << "-1\n";
else
{
while(v[c] != v[c + 1])
c++;
g << c + 1 << "\n";
}
break;
}
case 1:
{
while(CautBin(b) == -1)
b--;
int c = CautBin(b);
while(v[c] != v[c + 1])
c++;
g << c + 1<< "\n";
break;
}
case 2:
{
while(CautBin(b) == -1)
b++;
int c = CautBin(b);
while(v[c] != v[c - 1])
c--;
g << c - 1 << "\n";
break;
}
}
}
return 0;
}