Pagini recente » Cod sursa (job #598091) | Cod sursa (job #1997928) | Cod sursa (job #1194428) | Cod sursa (job #1147301) | Cod sursa (job #2482744)
#include <bits/stdc++.h>
using namespace std;
ifstream f ("cautbin.in");
ofstream g ("cautbin.out");
int n , m , v[100005];
int cautare(int st, int dr ,int x)
{
int mid;
while(st <= dr)
{
mid=( st + dr )/2;
if(v[mid] <= x)
st = mid + 1;
else
dr = mid - 1;
}
mid=(st+dr)/2;
if(v[mid] > x)
mid--;
if(v[mid] == x)
return mid;
return -1;
}
int cautare1(int st, int dr ,int x)
{
int mid;
while(st < dr)
{
mid=( st + dr )/2;
if(v[mid] <= x)
st = mid + 1;
else
dr = mid ;
}
mid=(st+dr)/2;
if(v[mid] > x)
--mid;
return mid;
}
int cautare2(int st, int dr ,int x)
{
int mid;
while(st < dr)
{
mid=( st + dr )/2;
if(v[mid] < x)
st = mid + 1;
else
dr = mid ;
}
mid=(st+dr)/2;
if(v[mid] > x)
++mid;
return mid;
}
int main()
{
f >> n;
for( int i=1 ; i<=n ; i++ )
f >> v[i];
f >> m;
int p, x;
while(m--)
{
f >> p >> x;
if(p == 0)
g << cautare(1,n,x) << "\n";
if(p == 1)
g << cautare1(1,n,x) << "\n";
if(p == 2)
g << cautare2(1,n,x) << "\n";
}
return 0;
}