Pagini recente » Cod sursa (job #2290934) | Cod sursa (job #946609) | Cod sursa (job #710723) | Cod sursa (job #245322)
Cod sursa(job #245322)
// cautare binara.cpp : Defines the entry point for the console application.
//
#include <stdio.h>
#include <stdlib.h>
int e[100004];
int n;
int compar( const void *a,const void *b)
{
return(*(int*)a-*(int*)b);
}
int calcul( FILE *f1, FILE *f2)
{
int a,m,i,b,j;
int dr=n,st=1,mid;
int g,f;
bool l=false;
fscanf(f1,"%d",&m);
for(i=1;i<=m;i++)
{
fscanf(f1,"%d %d",&a,&b);
if(a==0)
{
for(j=n;j>=1;j--)
if(e[j]==b)
{
fprintf(f2,"%d\n",j);
l=true;
}
if(!l)
fprintf(f2,"-1\n");
}
else if(a==1)
{
dr=n;
st=1;
while(1)
{
g=st;
f=dr;
mid=st+(dr-st)/2;
if(e[mid]>b)
dr=mid;
if(e[mid]<b)
st=mid;
if(e[mid]==b)
break;
if(st==g && dr==f)
break;
}
if(e[mid]>b)
mid--;
fprintf(f2,"%d\n",mid);
}
else
{
dr=n;
st=1;
while(1)
{
g=st;
f=dr;
mid=st+(dr-st)/2;
if(e[mid]>b)
dr=mid;
if(e[mid]<b)
st=mid;
if(e[mid]==b)
break;
if(st==g && dr==f)
break;
}
if(e[mid]<b)
mid++;
fprintf(f2,"%d\n",mid);
}
}
return 0;
}
int main()
{
int i;
FILE *f1,*f2;
f1=fopen("cautbin.in","r");
f2=fopen("cautbin.out","w");
fscanf(f1,"%d",&n);
for(i=1;i<=n;i++)
fscanf(f1,"%d",&e[i]);
qsort(e,n+1,sizeof(int),compar);
calcul(f1,f2);
return 0;
}