Cod sursa(job #941485)

Utilizator ThomasFMI Suditu Thomas Thomas Data 18 aprilie 2013 22:03:58
Problema Cautare binara Scor 60
Compilator cpp Status done
Runda Arhiva educationala Marime 0.67 kb
#include <fstream>
using namespace std;

ifstream f("cautbin.in");
ofstream g("cautbin.out");

int n,m,i,a,b,q;
int v[100001];

int bs(int x)
{
    int step,j;
    for(step=1;step<n;step<<=1);
    for(j=0;step;step>>=1)
        if(j+step<n && v[j+step]<=x) j+=step;
    return j;
}

int main()
{
    f>>n;
    for(i=0;i<n;i++) f>>v[i];

    f>>m;
    for(i=1;i<=m;i++)
    {
        f>>a>>b;
        if(a==0) {q=bs(b); if(v[q]==b) g<<q+1<<"\n"; else g<<"-1\n";}
        else if(a==1) {q=bs(b); g<<q+1<<"\n";}
        else
        {
            q=bs(b-1);
            g<<q+2<<"\n";
        }
    }

    f.close();
    g.close();
    return 0;
}