Cod sursa(job #1506182)

Utilizator Ruxandra985Nanu Ruxandra Laura Ruxandra985 Data 20 octombrie 2015 08:54:48
Problema Cautare binara Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.75 kb
#include <fstream>

using namespace std;
int v[100002];
int main()
{
    FILE *fin=fopen ("cautbin.in","r");
    FILE *fout=fopen ("cautbin.out","w");
    int i,n,m,cer,x,st,dr,mid,p;
    fscanf (fin,"%d",&n);
    for (i=1;i<=n;i++) fscanf (fin,"%d",&v[i]);
    fscanf (fin,"%d",&m);
    for (i=1;i<=m;i++){
        fscanf (fin,"%d %d",&cer,&x);
        if (cer==0){
            // trebuie sa gasim cea mai mare pozitie pe care se afla un element cu valoarea x
            // sau -1 daca nu exista
            st=1;
            dr=n;
            while (st<=dr){
                mid=(st+dr)/2;
                if (v[mid]<=x) st=mid+1;
                else dr=mid-1;
            }
            if (v[dr]==x)
                fprintf (fout,"%d\n",dr);
            else
                fprintf (fout,"-1\n");
        }
        else if (cer==1){
            // trebuie sa afisam cea mai mare pozitie
            //pe care se afla un element cu valoarea mai mica sau egala cu x in sir.
            p=x;
            st=1;
            dr=n;
            while (st<=dr){
                mid=(st+dr)/2;
                if (v[mid]<=p)
                    st=mid+1;
                else
                    dr=mid-1;
            }
            fprintf (fout,"%d\n",dr);
        }
        else {
            // trebuie sa afisam  cea mai mica pozitie
            //pe care se afla un element cu valoarea mai mare sau egala cu x in sir.
            p=x;
            st=1;
            dr=n;
            while (st<=dr){
                mid=(st+dr)/2;
                if (v[mid]<p)
                    st=mid+1;
                else
                    dr=mid-1;
            }
            fprintf (fout,"%d\n",st);
        }
    }
    return 0;
}