Cod sursa(job #2066156)

Utilizator FrincuFrinculeasa Alexandru Frincu Data 14 noiembrie 2017 18:48:12
Problema Cautare binara Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.11 kb
#include <iostream>
#include <fstream>

using namespace std;

const int L = 16;

int v[100001];

void bin(int &r,int n,int x,int pas,int v[100001])
{
    r=0;
    while(pas!=0)
    {
        if(r+pas<=n && v[r+pas]<=x)
            r+=pas;
        pas/=2;
    }
}

void bin2(int &r,int n,int x,int pas,int v[100001])
{
    r=0;
    while(pas!=0)
    {
        if(r+pas<=n && v[r+pas]<x)
            r+=pas;
        pas/=2;
    }
}

int main()
{
    int n,i,m,x,r,pas,y;
    ifstream f ("cautbin.in");
    ofstream cout("cautbin.out");
    f>>n;
    pas=1<<L;
    for(i=1; i<=n; i++)
        f>>v[i];
    f>>m;
    for(i=0; i<m; i++)
    {
        r=0;
        f>>y>>x;
        bin(r,n,x,pas,v);
        if(y==0)
        {
            bin(r,n,x,pas,v);
            if(r>0 && v[r]==x) cout<<r;
            else cout << -1;
        }
        if(y==1)
        {

            bin(r,n,x,pas,v);
            cout<<r;
        }
        if(y==2)
        {
            bin2(r,n,x,pas,v);
            r++;
            cout<<r;
        }
        cout << "\n";
    }
    return 0;
}