Cod sursa(job #2155590)

Utilizator bodea.georgianaBodea Georgiana bodea.georgiana Data 7 martie 2018 22:39:38
Problema Cautare binara Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.37 kb
#include <stdio.h>

using namespace std;
FILE *f,*g;

int v[100002],n;

int caut(int val)
{
    int aux=-1,st,dr,mij;
    st=1;
    dr=n;
    mij=(st+dr)/2;
    while(st<=dr)
    {
        if(v[mij]>val)
            dr=mij-1;
        else
        {
            aux=mij;
            st=mij+1;
        }
        mij=(st+dr)/2;
    }
    return aux;
}


int main()
{
    int m,i,x,val,ss,nr;
    f=fopen("cautbin.in","r");
    g=fopen("cautbin.out","w");
    fscanf(f,"%d",&n);
    for(i=1;i<=n;++i)
        fscanf(f,"%d",&v[i]);
    fscanf(f,"%d",&m);
    for(i=1;i<=m;++i)
    {
        fscanf(f,"%d %d",&x,&val);
        ss=caut(val);
        if(x==0)
        {
            if(v[ss]==val)
                fprintf(g,"%d\n",ss);
            else
                fprintf(g,"-1\n");
        }
        else
            if(x==1)
                fprintf(g,"%d\n",ss);
            else
            {
                if(v[ss]==val)
                {
                    while(v[ss]==val)
                        --ss;
                    fprintf(g,"%d\n",ss+1);
                }
                else
                {
                    nr=v[ss];
                    while(v[ss]==nr)
                        ++ss;
                    fprintf(g,"%d\n",ss);
                }
            }
    }
    fclose(f);
    fclose(g);
    return 0;
}