Cod sursa(job #1321063)

Utilizator R28dbDobreanu Radu R28db Data 18 ianuarie 2015 19:11:35
Problema Cautare binara Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.93 kb
#include <fstream>
using namespace std;
ifstream fin("x.in");
ofstream fout("x.out");
int val,N,a[100],i,M,aux;
void f(int val)
{
    int i,s;
    for (s=1;s<N;s<<=1);
    for (i=0;s;s>>=1)
        if (i+s<N&&a[i+s]<=val)
           i+=s;
    if(a[i]==val) fout<<i<<'\n';
    else fout<<-1<<'\n';

}
void f1(int val)
{
    int i,s;
    for (s=1;s<N;s<<=1);
    for (i=0;s;s>>=1)
        if (i+s<N&&a[i+s]<=val)
           i+=s;
    fout<<i<<'\n';

}
void f2(int val)
{
    int i,s;
    for (s=1;s<N;s<<=1);
    for (i=0;s;s>>=1)
        if (i+s<N&&a[i+s]<=val)
           i+=s;
    while(a[i]==val) i--;
    i++;
    fout<<i<<'\n';
}

int main()
{
    fin>>N;
    for(i=1;i<=N;i++)
       fin>>a[i];
    fin>>M;
    for(i=0;i<M;i++)
    {
        fin>>aux>>val;
        if(!aux) f(val);
        if(aux==1) f1(val);
        if(aux==2) f2(val);
    }
    fin.close();
    fout.close();
    return 0;
}