Pagini recente » Cod sursa (job #1614892) | Cod sursa (job #2764386) | Cod sursa (job #1017869) | Cod sursa (job #1390844) | Cod sursa (job #781329)
Cod sursa(job #781329)
#include <cstdio>
//#include "dbg.h"
#define Max 100001
int n,v[Max];
int cb0(int x){
int l = 1,r = n,m;
while(l < r)
{
m = (l+r)/2;
if(v[m] > x)r = m; else l = m+1;
}
return v[r] == x ? r : v[r-1] == x ? r-1 : -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 m,c,x;
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,&x);
switch(c){
case 0 : printf("%d\n",cb0(x)); break;
case 1 : printf("%d\n",cb1(x)); break;
case 2 : printf("%d\n",cb2(x)); break;
}
}
fclose(stdin);
fclose(stdout);
//ok();
return 0;
}