Pagini recente » Cod sursa (job #2189694) | Cod sursa (job #1042110) | Cod sursa (job #957829) | Cod sursa (job #3248267) | Cod sursa (job #798327)
Cod sursa(job #798327)
#include <cstdio>
#define Nmax 100002
using namespace std;
int n , a[Nmax];
int m;
int funct0(int x);
int funct1(int x);
int funct2(int x);
int main()
{
freopen("cautbin.in" , "r" , stdin);
freopen("cautbin.out" , "w" , stdout);
scanf("%d ", &n);
for(int i = 1 ; i <= n ; ++i)
scanf("%d" , &a[i]);
scanf("%d",&m);
while(m)
{
int no , x;
scanf("%d %d" , &no , &x);
switch (no)
{
case 0:
{
printf("%d\n",funct0(x));
break;
}
case 1:
{
printf("%d\n",funct1(x));
break;
}
case 2:{ //funct2(x);
printf("%d\n",funct2(x));
break;
}
}
m--;
}
return 0;
}
int funct0(int x)
{
int st = 1 ; int dr = n ;
int mij ;
while ( st <= dr )
{
mij = (st + dr) / 2;
if(x > a[mij])
st = mij+1;
if(x < a[mij])
dr = mij-1;
else if(x == a[mij])
{
while(a[mij] == x)
mij++;
return mij-1;
}
}
return -1;
}
int funct1(int x)
{
int st = 1,dr = n;
int mij ;
while ( st < dr )
{
mij = (st+dr)/2;
if(x >= a[mij])
st = mij+1;
else
dr = mij;
}
mij = (st + dr)/2;
if(a[mij] > x)
mij--;
return mij;
}
int funct2(int x)
{
int st = 1,dr = n;
int mij ;
while ( st < dr )
{
mij = (st+dr)/2;
if(x > a[mij])
st = mij+1;
else
dr = mij;
}
mij = (st+dr)/2;
if(a[mij]<x)
mij++;
return mij;
}