Cod sursa(job #1309121)

Utilizator deea101Andreea deea101 Data 5 ianuarie 2015 12:04:52
Problema Cautare binara Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.06 kb
#include <vector>
#include <fstream>
using namespace std;
ifstream f("cautbin.in");
ofstream g("cautbin.out");

vector <int> v;
int p=1; 

int binarysearch(vector <int> &v, int x)
{
    int N=v.size();
    
    int i,step=p;
    for(i=-1;step;step=step>>1)
        if(i+step<N && v[i+step]<=x) i=i+step;

    return i;
}
int binarysearch2(vector <int> &v, int x)
{
    int N=v.size();
    
    int i,step=p;
    for(i=-1;step;step=step>>1)
        if(i+step<N && v[i+step]<x) i=i+step;

    return i+1;
}
int main()
{
    int N,x,y,q;
	f>>N;
    while((p<<1)<=N) p=p<<1;
    while(N--)
	{
		f>>x;
		v.push_back(x);
	}
    int T;
	f>>T;
    while(T--)
    {
        f>>q>>x;
        switch(q)
        {
            case 0:
				y=binarysearch(v,x); 
                if(v[y]==x) g<<y+1<<'\n'; 
                else g<<-1; break;
            case 1:
                y=binarysearch(v,x);
                g<<y+1<<'\n'; break;
            case 2:
                y=binarysearch2(v,x);
                g<<y+1<<'\n'; break;
        }
    }
}