Cod sursa(job #1454360)

Utilizator hevelebalazshevele balazs hevelebalazs Data 26 iunie 2015 11:44:28
Problema Cautare binara Scor 100
Compilator c Status done
Runda Arhiva educationala Marime 0.86 kb
#include <stdio.h>
#define N 100000
#define fr(i,a,b) for(i=a;i<b;++i)
int a[N],x;
int sm(int l,int r){
    if(r-l==1)return a[l]<x;
    int c=(l+r)>>1;
    if(a[c]<x)return(c-l)+sm(c,r);
    return sm(l,c);
    }
int gt(int l,int r){
    if(r-l==1)return a[l]>x;
    int c=(l+r)>>1;
    if(a[c]>x)return gt(l,c)+(r-c);
    return gt(c,r);
    }
int main(){
    freopen("cautbin.in","r",stdin);
    freopen("cautbin.out","w",stdout);
    int n,m,i;
    scanf("%i",&n);
    fr(i,0,n)scanf("%i",a+i);
    scanf("%i",&m);
    fr(i,0,m){
        int y,z;
        scanf("%i%i",&y,&x);
        if(y==0){
            z=n-gt(0,n);
            if(z==0||a[z-1]!=x)printf("-1\n");
            else printf("%i\n",z);
            }
        else if(y==1)printf("%i\n",n-gt(0,n));
        else if(y==2)printf("%i\n",1+sm(0,n));
        }
    return 0;
    }