Cod sursa(job #1155729)

Utilizator tudi98Cozma Tudor tudi98 Data 27 martie 2014 09:38:49
Problema Cautare binara Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.24 kb
#include <fstream>
#define dim 100001
using namespace std;
ifstream f("cautbin.in");
ofstream g("cautbin.out");

int n,m,rez,y;
long long a[dim],b;

int bin_search(int x,int l,int r){

    if(l>r) return l;
    int mid=l+(r-l)/2;
    if(a[mid]==x) return mid;
    else if(a[mid]>x) return bin_search(x,mid+1,r);
    else if(a[mid]<x) return bin_search(x,l,mid-1);
    return mid;
}

int main(){

    int i;
    f>>n;
    for(i=1;i<=n;i++)
    f>>a[i];

    f>>m;
    for(i=1;i<=m;i++){
        f>>y>>b;
        rez=bin_search(b,1,n);
        switch(y){
                case 0:
                        if(a[rez]==b){
                                while(a[rez]==b) rez++;
                                g<<rez-1<<"\n";
                        }
                        else g<<-1<<"\n";
                        break;
                case 1:
                        while(a[rez]>b) rez--;
                        while(a[rez]<=b) rez++;
                        g<<rez-1<<"\n";
                        break;
                case 2:
                        while(a[rez]<b) rez++;
                        while(a[rez]>=b) rez--;
                        g<<rez+1<<"\n";
                        break;
        }
    }
}