Cod sursa(job #898548)

Utilizator cristicskCsakany Cristian cristicsk Data 28 februarie 2013 10:39:59
Problema Cautare binara Scor 40
Compilator cpp Status done
Runda Arhiva educationala Marime 1.09 kb
#include <iostream>
#include <fstream>
using namespace std;
fstream fin("cautbin.in",ios::in);
fstream fout("cautbin.out",ios::out);
int i,t,a,N,M,n[100001];

long zero(int a){
    int st,dr,mij;
    st=1;dr=N;
    while(st<=dr){
        mij=(st+dr)/2;
        if(n[mij]<=a)st=mij+1;
        else dr=mij-1;}
        mij=(st+dr)/2;
        if(n[mij]>a)mij--;
        if(n[mij]==a)return mij;
        return -1;}

long unu(int a){
    int mij,st=1,dr=N,nn=N;
    while(st<dr){
        mij=(st+dr)/2;
        if(n[mij]<=a)st=mij+1;
        else dr=mij;}
        mij=(st+dr)/2;
        if(n[mij]>a)mij--;
        return mij;}

long doi(int a){
    int st,dr,mij;
    st=1;dr=N;
    while(st<dr){
        mij=(st+dr)/2;
        if(n[mij]<a)st=mij+1;
        else dr=mij;}
        mij=(st+dr)/2;
        if(n[mij]<a)++mij;
        return mij;}


int main(){
fin>>N;
for(i=1;i<=N;i++){fin>>n[i];}
fin>>M;
for(i=1;i<=M;i++){fin>>t>>a;
if(t==0){fout<<zero(a)<<endl;}
if(t==1){fout<<unu(a)<<endl;}
if(t==2){fout<<doi(a)<<endl;}}
fin.close();
fout.close();
return 0;
}