Cod sursa(job #2325045)

Utilizator davidisimo040Asandoaiei David davidisimo040 Data 21 ianuarie 2019 21:42:20
Problema Cautare binara Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.4 kb
#include <bits/stdc++.h>
using namespace std;
ifstream fin("cautbin.in");
ofstream fout("cautbin.out");
int n,x,y,i,aa,bb,j,l,r,m,poz,ok,a[100001],mm;
int binar(int x,int a[],int l,int r)
{       //int m;
    if(l<=r) {m=(l+r)/2;
    if(a[m]==x) return m;
    else if(a[m]>x) return binar(x,a,l,m-1);
    else if(a[m]<x) return binar(x,a,m+1,r);

    }
    return -1;

}
int main()
{

    fin>>n;
    for(i=0;i<=n-1;i++)
    {
        fin>>x;
        a[i]=x;
    }
    for(i=0;i<n-1;i++)
        for(j=i+1;j<=n-1;j++)
        if(a[i]>a[j]) swap(a[i],a[j]);

fin>>mm;
for(i=1;i<=mm;i++)
    {fin>>x>>y;

    poz=binar(y,a,0,n-1);//cout<<poz<<' ';
    if(x==0){

        if (poz==-1) fout<<-1<<endl;
        else
        {
            while(a[poz]==y) poz++;
            fout<<poz<<endl;


        }

    }
    else if (x==1)
    {
        if(poz==-1)
            {while(binar(y,a,0,n-1)==-1) y--;
        fout<<binar(y,a,0,n-1)<<endl;
            }
            else {
                while(a[poz]==y) poz++;
                fout<<poz<<endl;
            }
    }
    else if(x==2)
    {
        if(poz==-1)
            {while(binar(y,a,0,n-1)==-1) y++;
        fout<<binar(y,a,0,n-1)<<endl;
            }
            else {
                while(a[poz]==y) poz--;
                fout<<poz+2<<endl;
            }
    }







    }



    return 0;
}