Pagini recente » Cod sursa (job #375658) | Cod sursa (job #1349538) | Cod sursa (job #1615770) | Cod sursa (job #555560) | Cod sursa (job #763508)
Cod sursa(job #763508)
#include <cstdio>
#include <algorithm>
using namespace std;
#define MAX 100001
int v[MAX],n;
int cb0(int x){
int l = 1,r = n,m;
// printf("%d %d\n",l,r);
while(r-l>1)
{
m = (l+r)/2;
if(v[m] <= x) l=m; else r=m-1;
// printf("%d %d\n",l,r);
}
return v[r] == x ? r : v[l] == x ? l :-1;
}
int cb1(int x){
int l = 1,r = n,m;
while(r-l>1)
{
m = (l+r)/2;
if(v[m] <= x) l=m; else r=m-1;
}
return v[r] <= x ? r : l;
}
int cb2(int x){
int l = 1,r = n,m;
while(r-l>1)
{
m = (l+r)/2;
if(v[m] >= x) r=m; else l=m+1;
}
return v[l] >= x ? l : r;
}
int main(){
int c,m,y;
freopen("cautbin.in","r",stdin);
freopen("cautbin.out","w",stdout);
scanf("%d",&n);
for(int i=1;i<=n;i++)scanf("%d ",&v[i]);
scanf("%d",&m);
while(m--)
{
scanf("%d %d",&c,&y);
switch(c){
case 0: printf("%d\n",cb0(y)); break;
case 1: printf("%d\n",cb1(y)); break;
case 2: printf("%d\n",cb2(y)); break;
}
}
return 0;
}