Cod sursa(job #1041696)

Utilizator cameliamartMart Camelia cameliamart Data 26 noiembrie 2013 00:00:35
Problema Cautare binara Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.08 kb
#include<iostream.h>
#include<fstream.h>
int v[10000],N,i,j;

int cauta0(int x) 
{
    int m;
	i=1;j=N;
    while(i<=j) 
	{
        m=(i+j)/2;
        if (v[m]<=x)
            i=m+1;
        else
            j=m-1;
    }
    m=(i+j)/2;
    if(v[m]>x)m --;
    if(v[m]==x)
        return m;
    return -1;
}
 
int cauta1(int x) 
{
    int m;
	i=1;j=N;
    while(i<j)
	{
        m=(i+j)/2;
        if(v[m]<=x)
            i=m+1;
        else
            j=m;
    }
    m=(i+j)/2;
    if(v[m]>x)--m;
    return m;
}
int cauta2(int x) 
{
    int m;
	i=1;j=N;
    while(i<j) 
	{
        m=(i+j)/2;
        if(v[m]<x)
            i=m+1;
        else
            j=m;
    }
    m=(i+j)/2;
    if(v[m]<x)++m;
    return m;
}
int main()
{
	ifstream f("cautbin.in");
	ofstream g("cautbin.out");
	int M,i,k,x;
	f>>N;
	for(i=1;i<=N;i++)
		f>>v[i];
	f>>M;
	while(M)
	{
		f>>k>>x;
		M--;
		if(k==0)
			g<<cauta0(x)<<"\n";
		else if(k==1)
			g<<cauta1(x)<<"\n";
		else if(k==2)
			g<<cauta2(x)<<"\n";
	}
	f.close();
	g.close();
	return 0;
}