Pagini recente » Cod sursa (job #2368841) | Cod sursa (job #2783468) | Cod sursa (job #1475083) | Cod sursa (job #1599812) | Cod sursa (job #661981)
Cod sursa(job #661981)
#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+2;
else
return mij+1;
}
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=1;i<=m;i++)
{
in>>opt;
in>>x;
if(opt==0)
out<<cautare0(v,n,x)<<"\n";
else
if(opt==1)
out<<cautare1(v,n,x)<<"\n";
else
out<<cautare2(v,n,x)<<"\n";
}
//eliberare memorie
free(v);
in.close();
out.close();
return 0;
}