Cod sursa(job #957792)

Utilizator cousin.batmanVaru Batman cousin.batman Data 5 iunie 2013 23:34:34
Problema Cautare binara Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.96 kb
#include<fstream>

using namespace std;

int main(){
    int n, i, m, res, p, p2, op, x; 
    freopen("cautbin.in", "rt", stdin);
    freopen("cautbin.out",  "wt", stdout);

    scanf("%d", &n);
    int a[n];

    for(i=0; i<n; i++)
        scanf("%d", &a[i]);

    scanf("%d", &m);
    
    for(p2=1; p2<=n; p2<<=1);

    for(; m; --m){
        scanf("%d %d", &op, &x);
        switch(op){
            case 0:
                for(i=0,p=p2; p; p>>=1)
                   if(i+p<n && a[i+p]<=x) i+=p;
                res = a[i]==x?i:-1;
                break;

            case 1:
                for(i=0,p=p2; p; p>>=1)
                   if(i+p<n && a[i+p]<=x) i+=p;
                res = i;
                break;

            case 2:
                for(i=n-1, p=p2; p; p>>=1)
                    if(i-p>=0 && a[i-p]>=x) i-=p;
                res = i;
                break;
        }
        printf("%d\n", res+1);
    }
    fclose(stdin);
    fclose(stdout);
    return 0;
}