Cod sursa(job #1916847)

Utilizator MocanVladMocan Vlad MocanVlad Data 9 martie 2017 10:30:58
Problema Cautare binara Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.08 kb
#include <iostream>
#include <fstream>
using namespace std;
int i,n,v[100002],a,b,m,p,r,q;

int cautareBinara (int s, int d, int x, int &r, int &q)
{
    int mij=(s+d)/2;if(v[mij]<=x&&mij>r)r=mij;if(v[mij]>=x&&mij<q)q=mij;
    if(v[mij]==x)return mij;
    else if(s<d)
    {
        if(v[mij]>x)return cautareBinara(s,mij-1,x,r,q);
        else return cautareBinara(mij+1,d,x,r,q);
    }
}


int main()
{
    ifstream in("cautbin.in");
    ofstream out("cautbin.out");
    in>>n;
    for(i=1;i<=n;i++)in>>v[i];
    in>>m;
    for(i=1;i<=m;i++)
    {
        in>>a>>b;
        if(a==0)
        {
            p=cautareBinara(1,n,b,r,q);
            while(v[p+1]==v[p]&&p+1<=n)p++;
            out<<p<<"\n";
        }
        else if(a==1)
        {
            r=1;
            cautareBinara(1,n,b,r,q);
            while(v[r+1]<=b&&r+1<=n)r++;
            out<<r<<"\n";
        }
        else
        {
            q=n;
            cautareBinara(1,n,b,r,q);
            while(v[q-1]>=b&&q>=1)q--;
            out<<q<<"\n";
        }
    }
    return 0;
}