Pagini recente » Cod sursa (job #212276) | Cod sursa (job #2517452) | Cod sursa (job #193922) | Cod sursa (job #3195240) | Cod sursa (job #846378)
Cod sursa(job #846378)
#include <stdio.h>
#include <algorithm>
#include <cmath>
#include <vector>
using namespace std;
#define Max 100001
int n,a[Max];
int cb(int val)
{
int lf=1,rt=n,md;
while(rt-lf>1)
{
md=(lf+rt)/2;
if(a[md]>val)rt=md-1; else lf=md;
}
return a[rt]==val?rt:a[lf]==val?lf:-1;
}
int cb1(int val)
{
int lf=1,rt=n,md;
while(rt-lf>1)
{
md=(lf+rt)/2;
if(a[md]>val)rt=md-1; else lf=md;
}
return a[rt]<=val?rt:lf;
}
int cb2(int val)
{
int lf=1,rt=n,md;
while(rt-lf>1)
{
md=(lf+rt)/2;
if(a[md]<val)lf=md+1; else rt=md;
}
return a[lf]>=val?lf:rt;
}
int main()
{
int m,op,x;
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);
for(int i=1;i<=m;i++)
{
scanf("%d %d",&op,&x);
switch(op)
{
case 0: printf("%d\n",cb(x)); break;
case 1: printf("%d\n",cb1(x)); break;
case 2: printf("%d\n",cb2(x)); break;
}
}
return 0;
}