Cod sursa(job #1248676)

Utilizator tabbyMaria Vasiliu tabby Data 25 octombrie 2014 19:43:56
Problema Cautare binara Scor 40
Compilator cpp Status done
Runda Arhiva educationala Marime 1.53 kb
#include <cstdlib>
#include <iostream>
#include <fstream>
using namespace std;
FILE *in=fopen("cautbin.in","r");
FILE *out=fopen("cautbin.out","w");
int a[100001];
int cautbin(int s, int d,int x)
{
    int m=-1;
    if(s>d) return -1;
    else
    {
        m=(s+d)/2;
        if(x==a[m])
            return m;
        else
            if(x<a[m]) return cautbin(s,m-1,x);
            else return cautbin(m+1,d,x);
    }
    return m;
}
 
int main()
{
    int n,nrc,c,r,poz;
    fscanf(in,"%d",&n);
    for(int i=1;i<=n;i++)
        fscanf(in,"%d",&a[i]);
    fscanf(in,"%d",&nrc);
    for(int i=0;i<nrc;i++)
    {
        fscanf(in,"%d%d",&c,&r);
        if(c==0)
        {
            poz=cautbin(1,n,r);
            if(poz==-1) fprintf(out,"-1\n");
            else
            {
                while(a[poz]==a[poz+1]) poz++;
                fprintf(out,"%d\n",poz);
            }
        }
        else
        {
            if(c==1)
            {
                    poz=cautbin(1,n,r);
                    while(poz==-1)
                    {r--; poz=cautbin(0,n,r);}
                    while(a[poz]==a[poz+1]) poz++;
                    fprintf(out,"%d\n",poz);
            }
            else
            {
                   poz=cautbin(1,n,r);
                   while(poz==-1)
                   {r++; poz=cautbin(0,n,r);}
                   while(a[poz]==a[poz-1]) poz--;
                   fprintf(out,"%d\n",poz);
            }
        }
    }
    fclose(in); fclose(out);
    return 0;
}