Pagini recente » Cod sursa (job #3214370) | Cod sursa (job #139349) | Borderou de evaluare (job #1569141) | Cod sursa (job #1341734) | Cod sursa (job #661976)
Cod sursa(job #661976)
#include<stdlib.h>
#include<fstream>
#include<iostream>
using namespace std;
ifstream in("cautbin.in");
ofstream out("cautbin.out");
int cautare0(int *v,int n,int x)
{
int a=0,b=n-1,mij=(a+b)/2;
while(a<=b)
{
if(v[mij]<=x)
a=mij+1;
else
b=mij-1;
mij=(a+b)/2;
}
if(v[mij]>x)
mij--;
if(v[mij-1]==x)
return mij+1;
else
return -1;
}
int cautare1(int *v,int n,int x)
{
int a=0,b=n-1,mij=(a+b)/2;
while(a<b)
{
if(v[mij]<=x)
a=mij+1;
else
b=mij;
mij=(a+b)/2;
}
if(v[mij]>x)
return mij;
else
return mij+1;
}
int cautare2(int *v,int n,int x)
{
int a=0,b=n-1,mij=(a+b)/2;
while(a<b)
{
if(v[mij]<x)
a=mij+1;
else
b=mij;
mij=(a+b)/2;
}
if(v[mij]>x)
return mij+1;
else
return mij;
}
int main()
{
int *v,n,i,m,opt,x;
in>>n;
//alocarea vectorului de n elemente
v=( int *)malloc(n*sizeof( int ));
for(i=0;i<n;i++)
in>>v[i];
in>>m;
for(i=0;i<m;i++)
{
in>>opt;
in>>x;
if(opt==0)
out<<cautare0(v,n,x)<<"\t";
else
if(opt==1)
out<<cautare1(v,n,x)<<"\t";
else
out<<cautare2(v,n,x)<<"\t";
}
//eliberare memorie
free(v);
in.close();
out.close();
return 0;
}