Cod sursa(job #333603)

Utilizator levap1506Gutu Pavel levap1506 Data 23 iulie 2009 12:40:35
Problema Cautare binara Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.1 kb
#include <fstream>
#define Nmax 100010
using namespace std;
ifstream in;
ofstream out;

int N, A[Nmax],i,M,op,b;
long op0(int st,int dr) {
    if (st==dr) {if (A[st-1]==A[b]) return st; else return -1; }
    int mij=st+(dr-st)/2;
    if (A[mij]<=A[b]) return op0(mij+1,dr); else
       return op0(st,mij);
}
long op1(int st,int dr) {
if (st==dr) {if (A[st-1]<=A[b]) return st; else return -1; }
    int mij=st+(dr-st)/2;
    if (A[mij]<=A[b]) return op1(mij+1,dr); else
       return op1(st,mij);
}
long op2(int st,int dr) {
if (st==dr) {if (A[st]>=A[b]) return st+1; else return -1; }
    int mij=st+(dr-st)/2;
    if (A[mij]<A[b]) return op2(mij+1,dr); else
       return op2(st,mij);

}
int main() {
    in.open("cautbin.in");
    out.open("cautbin.out");
    in >> N;
    for (i=0;i<N;i++)
    {
        in >> A[i];
    }
    in >> M;
    for (i=0;i<M;i++) {
        in >> op >> b;
        switch (op) {
            case 0:out << op0(1,N) << "\n";
            break;
            case 1:out << op1(1,N) << "\n";
            break;
            case 2:out << op2(1,N) << "\n";
            break;
        }
    }
    return 0;
}