Pagini recente » Istoria paginii runda/minune2 | Clasament lsp_01 | Arhiva de probleme | Arbori Indexati Binar | Cod sursa (job #202406)
Cod sursa(job #202406)
#include <stdio.h>
long sir[100001];
int main ()
{long st,dr,n,m,i,a,b,mij;
FILE *fin=fopen("cautbin.in","r");
FILE *fout=fopen("cautbin.out","w");
fscanf(fin,"%ld",&n);
for (i=1;i<=n;i++)
{fscanf(fin,"%ld",&sir[i]);}
fscanf(fin,"%ld",&m);
for (i=1;i<=m;i++)
{fscanf(fin,"%ld%ld",&a,&b);
switch(a)
{case 0:
for(st=1,dr=n;!(sir[mij=(st+dr)/2]==b&&sir[mij-1]!=b)&&st<=dr;)
{(b<sir[mij])?(dr=mij-1):(st=mij+1);}
if(st>dr)
fprintf(fout,"-1\n");
else
fprintf(fout,"%ld\n",mij);
break;
case 1:
for(st=1,dr=n;!(sir[mij=(st+dr)/2]<=b&&sir[mij+1]>b)&&st<=dr;)
{(b<sir[mij])?(dr=mij-1):(st=mij+1);}
fprintf(fout,"%ld\n",mij);
break;
case 2:
for(st=1,dr=n;!(sir[mij=(st+dr)/2]>=b&&sir[mij-1]<b)&&st<=dr;)
{(b<sir[mij])?(dr=mij-1):(st=mij+1);}
fprintf(fout,"%ld\n",mij);
}
}
fclose(fout);
return 0;
}