Cod sursa(job #1601248)

Utilizator gabime11Gabriel gabime11 Data 15 februarie 2016 20:33:42
Problema Cautare binara Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 2.17 kb
/*Se da un sir de numere ordonat crescator cu N elemente,
si se cere sa se raspunda la M intrebari de tipul:
0 x - cea mai mare pozitie pe care se afla un element cu valoarea x
sau -1 daca aceasta valoare nu se gaseste in sir
1 x - cea mai mare pozitie pe care se afla un element cu valoarea mai mica
sau egala cu x in sir. Se garanteaza ca cel mai mic numar al sirului este mai mic sau egal decat x
2 x - cea mai mica pozitie pe care se afla un element cu valoarea mai mare
sau egala cu x in sir. Se garanteaza ca cel mai mare numar din sir este mai mare sau egal decat x

cautbin.in	    cautbin.out
5                  4
1 3 3 3 5          4
3                  2
0 3
1 3
2 3*/
#include<iostream>
#include<fstream>
using namespace std;
int zero(int v[100002], int n, int x)
{
    int a,b,mij;
    a=1;
    b=n;
    while(a<=b)
    {
        mij=(a+b)/2;
        if(v[mij]<=x)
        {
            a=mij+1;
        }
        else
        {
            b=mij-1;
        }
    }
    if(v[b]==x)
    {
        return b;
    }
    else
    {
        return -1;
    }
}
int unu(int v[100002], int n, int x)
{
    int a,b,mij;
    a=1;
    b=n;
    while(a<=b)
    {
        mij=(a+b)/2;
        if(v[mij]<=x)
        {
            a=mij+1;
        }
        else
        {
            b=mij-1;
        }
    }
        return b;
}
int doi(int v[100002], int n, int x)
{
    int a,b,mij;
    a=1;
    b=n;
    while(a<=b)
    {
        mij=(a+b)/2;
        if(v[mij]>=x)
        {
            b=mij-1;
        }
        else
        {
            a=mij+1;
        }
    }
  return a;
}
int main()
{
    int v[100002],i,j,N,M,x,t;
    ifstream fin("cautbin.in");
    ofstream fout("cautbin.out");
    fin>>N;
    for(i=1;i<=N;i++)
    {
        fin>>j;
        v[i]=j;
    }
    fin>>M;
    for(i=1;i<=M;i++)
    {
        fin>>t>>x;
        if(t==0)
        {
            fout<<zero(v,N,x)<<'\n';
        }
        if(t==1)
        {
            fout<<unu(v,N,x)<<'\n';
        }
        if(t==2)
        {
            fout<<doi(v,N,x)<<'\n';
        }
    }
    fin.close();
    fout.close();
    return 0;
}