Cod sursa(job #1952291)

Utilizator ScarymovieMocanu Alexandru Scarymovie Data 4 aprilie 2017 00:34:20
Problema Cautare binara Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.93 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 cautamic(int x)
{
    int step,k=0;
    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 cauta(int x)
{
    int k=cautamic(x);
    if(v[k]==x) return k;
    else return -1;
}
int cautamare(int x)
{
    int step,k=0;
    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;
}