Cod sursa(job #1952286)

Utilizator ScarymovieMocanu Alexandru Scarymovie Data 4 aprilie 2017 00:31:03
Problema Cautare binara Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 1.07 kb
#include <fstream>
#include<vector>
using namespace std;
int n,m,t,x;
vector<int> v;
ifstream f("cautbin.in");
ofstream g("cautbin.out");
int cauta(int x)
{
    int step;
    for(step=1;step<n;step<<=1);
    for(int i=0;step;step>>=1)
        if(i+step<=n)
            {if(v[i+step]==x && v[i+step+1]>x) return i+step;
             else i+=step;
            }
    return -1;
}
int cautamic(int x)
{
    int step,k;
    for(step=1;step<n;step<<=1);
    for(int i=0;step;step>>=1)
        if(i+step<=n)
            if(v[i+step]<=x) {k=i+step;i+=step;}
    return k;
}
int cautamare(int x)
{
    int step,k;
    for(step=1;step<n;step<<=1);
    for(int i=0;step;step>>=1)
        if(i+step<=n)
            if(v[i+step]<x) {k=i+step;i+=step;}
    return k+1;
}
int main()
{
    f>>n;v.resize(n+1);
    for(int i=1;i<=n;i++) f>>v[i];
    f>>m;
    for(int i=1;i<=m;i++)
        {
            f>>t>>x;
            if(!t) g<<cauta(x)<<'\n';
            else if(t==1) g<<cautamic(x)<<'\n';
            else g<<cautamare(x)<<'\n';
        }
    return 0;
}