Cod sursa(job #819535)

Utilizator alexblackFMI - Dumitrache Alexandru alexblack Data 19 noiembrie 2012 11:12:55
Problema Cautare binara Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.93 kb
#include <fstream>
using namespace std;
ifstream in ("cautbin.in");
ofstream out("cautbin.out");
int const N=100005;
int n,x,v[N],a,b;
int cautb0 (int x)
{
    int poz=0;
    for(int i=1<<30;i>0;i=i>>1)
        if((poz+i<=n)&&(x>=v[poz+i]))   poz+=i;
    if(v[poz]!=x)   return -1; // a==0
    return poz;
}
int cautb1 (int x)
{
    int poz=0;
    for(int i=1<<30;i>0;i=i>>1)
        if((poz+i<=n)&&(x>=v[poz+i]))   poz+=i;
    return poz;
}
int cautb2 (int x)
{
    int poz=0;
    for(int i=1<<30;i>0;i=i>>1)
        if((poz+i<=n)&&(x>v[poz+i]))   poz+=i;
    return poz+1;
}
int main()
{
    in>>n;  for(int i=1;i<=n;i++)   in>>v[i];
    in>>x;  for(int i=1;i<=x;i++)
    {
        in>>a>>b;
        switch(a)
        {
            case 0: out<<cautb0(b)<<"\n";   break;
            case 1: out<<cautb1(b)<<"\n";   break;
            default:out<<cautb2(b)<<"\n";   break;
        }
    }
    return 0;
}