Cod sursa(job #1121916)

Utilizator firutibogdanFiruti Bogdan-Cristian firutibogdan Data 25 februarie 2014 14:47:00
Problema Cautare binara Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.94 kb
#include<fstream>
using namespace std;
int n,i,x,p1,p2,m,a[100002],r,y,v;
fstream fin,fout;
int main()
{
    fin.open("cautbin.in",ios::in);
    fout.open("cautbin.out",ios::out);
    fin>>n;
    for(i=1;i<=n;i++)
    {
        fin>>a[i];
    }
    fin>>m;
    x=1;
    while(x<=m)
    {
        fin>>y>>v;
        if(y==0)
        {
            p1=1;
            p2=n;
            while(p1<=p2)
            {
                m=p1+(p2-p1)/2;
                if(v>=a[m])
                {
                    p1=m+1;
                }
                else
                {
                    p2=m-1;
                }
            }
            if(a[p2]==v)
            {
                fout<<p2;
            }
            else
            {
                fout<<"-1";
            }
            fout<<"\n";
            }
        if(y==1)
        {
            p1=1;
            p2=n;
            r=0;
            while(p1<=p2)
            {
                m=p1+(p2-p1)/2;
                if(v<a[m] && v>=a[m-1])
                {
                    fout<<m-1<<"\n";
                    break;
                }
                if(v>=a[m])
                {
                    p1=m+1;
                }
                else
                {
                    p2=m-1;
                }
            }
        }
        if(y==2)
        {
            p1=1;
            p2=n;
            while(p1<=p2)
            {
                m=p1+(p2-p1)/2;
                if(v<=a[m] && v>a[m-1])
                {
                    fout<<m<<"\n";
                    break;
                }
                else
                if(v>a[m])
                {
                    p1=m+1;
                }
                else
                {
                    p2=m-1;
                }
            }
        }
        x=x+1;
    }
        fout.close();
        fin.close();
        return 0;
}