Cod sursa(job #459280)

Utilizator sapiensCernov Vladimir sapiens Data 28 mai 2010 21:04:52
Problema Cautare binara Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.01 kb
#include <fstream>
using namespace std;

ifstream fin; ofstream fout;
long n,m,a[100010],i,x,y;

void caut1 (long l,long r,long y) {
     long u=l,v=r,z;
     while (u<v) {
           z=(u+v+1)/2;
           if (a[z]<=y) u=z; else v=z-1;
     }
     if (a[u]==y) fout<<u+1<<endl; else fout<<-1;
}

void caut2 (long l,long r,long y) {
     long u=l,v=r,z;
     while (u<v) {
           z=(u+v+1)/2;
           if (a[z]<=y) u=z; else v=z-1;
     }
     fout<<u+1<<endl;
}

void caut3 (long l,long r,long y) {
     long u=l,v=r,z;
     while (u<v) {
           z=(u+v)/2;
           if (a[z]>=y) v=z; else u=z+1;
     }
     fout<<u+1<<endl;
}

int main () {
    fin.open ("cautbin.in"); fout.open ("cautbin.out");
    fin>>n;
    for (i=0; i<n; i++) fin>>a[i];
    fin>>m;
    for (i=0; i<m; i++) {
        fin>>x>>y;
        if (x==0) caut1 (0,n-1,y); else
           if (x==1) caut2 (0,n-1,y); else
              caut3 (0,n-1,y);
    }
    fin.close (); fout.close ();
    return 0;
}