Pagini recente » Cod sursa (job #340915) | Cod sursa (job #1638276) | Cod sursa (job #2418139) | Cod sursa (job #2853284) | Cod sursa (job #305282)
Cod sursa(job #305282)
#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,long int dr)
{
long int 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 st,long int dr)
{
long int mij,nr;
while(st<=dr)
{
mij=(st+dr)/2;
if(x>=v[mij]) nr=mij,st=mij+1;
else dr=mij-1;
}
return nr;
}
long int doi(long int st,long int dr)
{
long int mij,nr;
while(st<=dr)
{
mij=(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(1,n);
if(opt==1) k=unu(1,n);
if(opt==2) k=doi(1,n);
fprintf(out,"%ld\n",k);
}
return 0;
}