Cod sursa(job #2192996)

Utilizator alexmihai21Mihai Alexandru alexmihai21 Data 8 aprilie 2018 09:20:22
Problema Cautare binara Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 2.55 kb
#include <stdio.h>
#include <stdlib.h>
#include <iostream>


void cautarebinara()
{
    int x,*v,n,m,i,y,mid,right,left,sol[10],k=0;
    ifstream in("cautbin.in");
    ofstream out("cautbin.out");
    in>>n;
    v=(int*)malloc(n*sizeof(int));
    for(i=0; i<n; i++)
        in>>v[i];
    in>>m;
    while(m!=0)
    {
        in>>y;
        in>>x
          if(y==0)
        {
            //pozitia cea mai mare a unui element
            left=0;
            right=n;
            mid=n/2;
            b=0;
            while(left<=right)
            {
                mid=(Left+Right)/2;
                while(v[mid]==x)
                    mid++;
                if(v[mid]==x)
                {
                    break;
                    b=1;
                }
                if(v[mid] > x)
                    right=mid - 1;
                if(v[mid] < x)
                    left=mid+1;
            }
            if(b==1)
                sol[k]=mid;
            else sol[k]=-1;
            out<<sol[k];
            k++;
        }
        if(y==1)
        {
            //pozitia cea mai mare a unui element mai mica sau egala cu x
            left=0;
            right=n;
            mid=n/2;
            b=0;
            while(left<=right)
            {
                mid=(Left+Right)/2;
                while(v[mid]==x)
                    mid++;
                if(v[mid]==x)
                {
                    break;
                    b=1;
                }
                if(v[mid] > x)
                    right=mid - 1;
                if(v[mid] < x)
                    left=mid+1;
            }
            if(b==1)
                sol[k]=mid;
            else sol[k]=left;
            out<<sol[k];
            k++;
        }
        if(y==2)
        {
            //pozitia cea mai mica a unui element mai mica sau egalcu x
            left=0;
            right=n;

            b=0;
            while(left<=right)
            {
                mid=(Left+Right)/2;
                while(v[mid]==x)
                    mid++;
                if(v[mid]==x)
                {
                    break;
                    b=1;
                }
                if(v[mid] > x)
                    right=mid - 1;
                if(v[mid] < x)
                    left=mid+1;
            }
            if(b==1)
                sol[k]=mid;
            else sol[k]=right;
            out<<sol[k];
            k++;
        }



    }
    int main()
    {
        cautarebinara();

    }