Cod sursa(job #1155698)

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

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

int binsearch(int x){
    long i,step;
    for(step=1;step<n;step<<=1);
    for(i=0;step;step>>=1)
        if(a[i+step]<=x && step+i<n)    i+=step;
    return i;
}

int main(){

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

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