Cod sursa(job #248568)

Utilizator drag0s93Mandu Dragos drag0s93 Data 26 ianuarie 2009 00:39:07
Problema Cautare binara Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.06 kb
#include<stdio.h>
int n,m1,v[100000],x,intr;
void citire()
{
	scanf("%d",&n);
	for(int i=1;i<=n;++i)
		scanf("%d",&v[i]);
	scanf("%d",&m1);
}
int op0()
{
    int i, step;   
    for (step = 1; step < n; step <<= 1);   
    for (i = 0; step; step >>= 1)   
        if (i + step < n && v[i + step] <= x)   
           i += step;   
    return i;  
}
int op1()
{
	int i, step;   
    for (step = 1; step < n; step <<= 1);   
    for (i = 0; step; step >>= 1)   
        if (i + step < n && v[i + step] < x)   
           i += step;   
    return i; 
}
int op2()
{
	int i, step;   
    for (step = 1; step < n; step <<= 1);   
    for (i = 0; step; step >>= 1)   
        if (i + step < n && v[i + step] > x)   
           i += step;   
    return i; 
}
int main()
{
	freopen("cautbin.in","r",stdin);
	freopen("cautbin.out","w",stdout);
	citire();
	for(int i=1;i<=m1;++i)
	{
		scanf("%d%d",&intr,&x);
		if(intr==0)
			printf("%d\n",op0());
		if(intr==1)
			printf("%d\n",op1());
		if(intr==2)
			printf("%d\n",op2());
	}
	return 0;
}