Cod sursa(job #1321076)

Utilizator R28dbDobreanu Radu R28db Data 18 ianuarie 2015 19:19:22
Problema Cautare binara Scor 60
Compilator cpp Status done
Runda Arhiva educationala Marime 0.95 kb
#include <fstream>
using namespace std;
ifstream fin("cautbin.in");
ofstream fout("cautbin.out");
int val,N,a[100010],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;
}