Pagini recente » Cod sursa (job #386546) | Cod sursa (job #227310) | Cod sursa (job #2816708) | Cod sursa (job #1176106) | Cod sursa (job #2169169)
#include <fstream>
using namespace std;
ifstream fin ("cautbin.in");
ofstream fout ("cautbin.out");
int v[100001];
int cautbin (int y, int low, int high, int key )
{
while ( low <= high )
{
int mid = low + (high - low)/2;
if ( y == 0 )
{
if ( v[mid] == key && ( v[mid+1] > key || mid == high ) )
return mid;
}
else
{
if ( y == 1 )
{
if ( v[mid] <= key && ( v[mid+1] > key || mid == high ) )
return mid;
}
else
{
if ( v[mid] >= key && ( v[mid-1] < key || mid == high ) )
return mid;
}
}
if ( y == 0 || y == 1 )
{
if ( v[mid] <= key )
low = mid + 1;
else
high = mid - 1;
}
else
{
if ( v[mid] < key )
low = mid + 1;
else
high = mid - 1;
}
}
return -1;
}
int main()
{
int n, m;
fin>>n;
for ( int i = 1; i <= n; ++i )
fin>>v[i];
fin>>m;
while (m--)
{
int y, x;
fin>>y>>x;
fout<<cautbin(y, 1, n, x)<<'\n';
}
}