Cod sursa(job #2062360)

Utilizator daniela12Sandu Daniela Teodora daniela12 Data 10 noiembrie 2017 11:54:12
Problema Cautare binara Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.62 kb
#include <iostream>
#include <fstream>
using namespace std;
ifstream f("cautbin.in");
ofstream g("cautbin.out");
int v[100050],n, m,op, a, b;
void citire ()
{
  int i;
  f>>n;
  for(i=1;i<=n; i++)    f>>v[i];
}
int cautarebin (int x)
{
    int li=1, ls=n, mid;
    while(li<=ls)
    {
        mid=(li+ls)/2;
        if(v[mid]==x)   return mid;
        if(x>v[mid])    li=mid+1;
        else    ls=mid-1;
    }
    a=li, b=ls;
    return -1;
}
int main()
{
    citire();
    int x, c, j;
    f>>m;
    while(m)
    {
        f>>op>>x;
        c=cautarebin(x);
        if(op==0)
            {if(c==-1)
                g<<c<<endl;
            else
                {j=c;
                while(v[c]==x)  c++;
                c--;
                g<<c<<endl;
                }
            }
        else
            if(op==1)
                {if(c!=-1)
                    {   j=c;
                        while(v[c]==x)  c++;
                        c--;
                        if(j==c)    j++;
                        g<<c<<endl;
                    }
                else
                    if(a<b) g<<a+1<<endl;
                    else    g<<b+1<<endl;
                }
            else
                {if(c!=-1)
                    {   j=c;
                        while(v[c]==x)  c--;
                        c++;
                        if(j==c)    j--;
                        g<<c<<endl;
                    }
                else
                    if(a>b) g<<a-1<<endl;
                    else    g<<b-1<<endl;
                }
    --m;
    }
    f.close();
    g.close();
}