Cod sursa(job #465236)

Utilizator nickyyLal Daniel Emanuel nickyy Data 23 iunie 2010 18:29:17
Problema Cautare binara Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.84 kb
#include <stdio.h>
#define maxn 100001
using namespace std;
int v[maxn],n;

	int eg_mare(int x,int k)
	{int j;
	 for(j=0;k;k>>=1)
		 if(j+k<=n && v[j+k]<=x) j+=k;
	 return j;
	}
	
	int mic(int x,int k)
	{int j;
	 for(j=n;k;k>>=1)
		 if(j-k>0 && v[j-k]>=x) j-=k;
	 return j;
	}
	
int main(void)
{FILE *fin=fopen("cautbin.in","r");
 FILE *fout=fopen("cautbin.out","w");
 int i,o,x,m,k;
 
 fscanf(fin,"%d",&n);
 for(i=1;i<=n;i++) fscanf(fin,"%d",v+i);
 for(k=1;k<=n;k<<=1);
 fscanf(fin,"%d",&m);
 for(;m;m--)
	 {fscanf(fin,"%d%d",&o,&x);
	  switch (o)
		{ case 0:
			{i=eg_mare(x,k);
			 if(v[i]!=x) fprintf(fout,"-1\n");
			 else fprintf(fout,"%d\n",i);
			} break;
		  case 1:fprintf(fout,"%d\n",eg_mare(x,k)); break;
		  case 2:fprintf(fout,"%d\n",mic(x,k)); break;
		}
	 }
 fclose(fin); fclose(fout);
 return 0;
}