Pagini recente » Istoria paginii planificare/sedinta_20061121 | Profil Eszti | Cod sursa (job #2536110) | Cod sursa (job #450726) | Cod sursa (job #199166)
Cod sursa(job #199166)
#include <cstdio>
#include <cstring>
#include <iostream>
#include <cmath>
#define MAXD 100000
int Numbers[MAXD], n , q ,x ,result;
void cautBin1(int i, int j ,int x)
{
if (i <= j)
{
int mijloc = i + ((j - i)>>1);
if (Numbers[mijloc] <= x)
{
if (Numbers[mijloc] == x)
result = mijloc;
cautBin1(mijloc + 1 , j, x);
}
else
cautBin1(i , mijloc - 1, x);
}
}
void cautBin2(int i, int j, int x)
{
if (i <= j)
{
int mijloc = i + ((j - i)>>1);
if (Numbers[mijloc] <= x)
{
result = mijloc;
cautBin2(mijloc + 1 , j , x);
}
else
cautBin2(i, mijloc - 1 , x);
}
}
void cautBin3(int i , int j , int x)
{
if (i <= j)
{
int mijloc = i + ((j - i)>>1);
if (Numbers[mijloc] < x)
cautBin3(mijloc + 1, j, x);
else
{
result = mijloc ;
cautBin3(i, mijloc - 1 , x);
}
}
}
int main()
{
freopen("cautbin.in","r",stdin);
freopen("cautbin.out","w",stdout);
scanf("%d",&n);
for (int i = 0 ; i < n ;i++)
scanf("%d",&Numbers[i]);
scanf("%d",&q);
for (int i = 0 ; i < q; i ++)
{
int type;
scanf("%d %d", &type,&x);
switch(type)
{
case 0 :
result = -1;
cautBin1(0,n -1 ,x);
break;
case 1:
cautBin2(0,n - 1,x);
break;
default:
cautBin3(0,n -1 ,x);
break;
}
if (result != -1 )
result++;
printf("%d\n",result);
}
return 0;
}