Cod sursa(job #1121937)

Utilizator badea_adi1999Badea Adrian Catalin badea_adi1999 Data 25 februarie 2014 14:55:13
Problema Cautare binara Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.43 kb
#include <cstdio>
using namespace std;
FILE *f=fopen("cautbin.in","r");
FILE *g=fopen("cautbin.out","w");
int x,v[100001];
int caut0(int p,int q)
{int mid=(p+q)/2;
if (p>q) return -1;
if (v[mid]==x) return mid;
if (v[mid]>x) return caut0(mid+1,q);
if (v[mid]<x) return caut0(p,mid-1);
}
int caut1(int p,int q)
{int mid=(p+q)/2;
if (v[mid]<=x&&v[mid+1]>x) return mid;
if (v[mid]<x) return caut1(p,mid-1);
if (v[mid]>=x) return caut1(mid+1,q);
}
int caut2(int p,int q)
{int mid=(p+q)/2;
if (x>v[mid-1]&&x<=v[mid]) return mid;
if (x>v[mid]) return caut2(mid+1,q);
if (x<=v[mid-1]) return caut2(p,mid-1);


}
int main()
{int n,m,i,p,tip;
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",&tip,&x);
                    if (tip==0) {p=caut0(1,n);
                                 if (p==-1) fprintf(g,"%d\n",p);
                                        else {while (v[p+1]==x) p++;
                                              fprintf(g,"%d\n",p);
                                              }
                                 }else
                    if (tip==1) {p=caut1(1,n);
                                 fprintf(g,"%d\n",p);
                                 }else
                                {p=caut2(1,n);
                                 fprintf(g,"%d\n",p);
                                 }
                    }





return 0;
}