Pagini recente » Cod sursa (job #3195359) | Cod sursa (job #2876923) | Cod sursa (job #535164) | Cod sursa (job #464) | Cod sursa (job #305275)
Cod sursa(job #305275)
#include<stdio.h>
long int n,m,v[100003],x;
FILE *in=fopen("cautbin.in","rt");
FILE *out=fopen("cautbin.out","wt");
long int zero()
{
long int st,dr,mij;
while(st<=dr)
{
mij=dr+(st-dr)/2;
if(x<v[mij]) dr=mij-1;
else if(x>v[mij]) st=mij+1;
else return mij;
}
return -1;
}
long int unu()
{
long int mij,st,dr,nr;
while(st<=dr)
{
mij=dr+(st-dr)/2;
if(x>=v[mij]) nr=mij,st=mij+1;
else dr=mij-1;
}
return nr;
}
long int doi()
{
long int st,dr,mij,nr;
while(st<=dr)
{
mij=dr+(st-dr)/2;
if(x<=v[mij]) nr=mij,dr=mij-1;
else st=mij+1;
}
return nr;
}
int main()
{
long int i,k;
int opt;
fscanf(in,"%ld",&n);
for(i=1;i<=n;i++) fscanf(in,"%ld",&v[i]);
fscanf(in,"%ld",&m);
for(i=1;i<=m;i++)
{
fscanf(in,"%d",&opt);
fscanf(in,"%ld",&x);
if(opt==0) k=zero();
if(opt==1) k=unu();
if(opt==2) k=doi();
fprintf(out,"%ld\n",k);
}
return 0;
}