Pagini recente » Cod sursa (job #552431) | Cod sursa (job #1291723) | Cod sursa (job #3296592) | Profil AndreeaLemnaru | Cod sursa (job #2241618)
#include <iostream>
#include <fstream>
using namespace std;
ifstream f ("cautbin.in");
ofstream g ("cautbin.out");
int n,m;
int a[100005];
void cautbin0(int x)
{
int i;
int st=1, dr=n,mid;
int var;
if(n%2==1)mid=n/2+1;
else mid=n/2;
while (1==1)
{
if(st==dr)break;
if(x==a[mid])break;
if(x<a[mid])
{
dr=mid;
var=dr-st;
if(var%2==1) mid=var/2+1;
else mid = var/2;
}
if(x>a[mid])
{
st=mid;
var=dr-st;
if(var%2==1) mid=var/2+1;
else mid=var/2;
}
}
int ii;
ii=mid;
for(i=ii;i<=n;i++)
{
if(a[i]==a[mid])mid=i;
}
g<<mid<<"\n";
}
void cautbin1(int x)
{
int i;
int st=1, dr=n,mid;
int var;
if(n%2==1)mid=n/2+1;
else mid=n/2;
while (1==1)
{
if(x==a[mid] || a[mid]<x)break;
if(x<a[mid])
{
dr=mid;
var=dr-st;
if(var%2==1) mid=var/2+1;
else mid = var/2;
}
if(x>a[mid])
{
st=mid;
var=dr-st;
if(var%2==1) mid=var/2+1;
else mid=var/2;
}
}
int ii;
ii=mid;
for(i=ii;i<=n;i++)
{
if(a[i]==a[mid] || a[i]<a[mid])mid=i;
}
g<<mid<<"\n";
}
void cautbin2(int x)
{
int i;
int st=1, dr=n,mid;
int var;
if(n%2==1)mid=n/2+1;
else mid=n/2;
while (1==1)
{
if(x==a[mid] || a[mid]>x)break;
if(x<a[mid])
{
dr=mid;
var=dr-st;
if(var%2==1) mid=var/2+1;
else mid = var/2;
}
if(x>a[mid])
{
st=mid;
var=dr-st;
if(var%2==1) mid=var/2+1;
else mid=var/2;
}
}
int ii;
ii=mid;
for(i=ii;i>=1;i--)
{
if(a[i]==a[mid] || a[i]>a[mid])mid=i;
}
g<<mid<<"\n";
}
int main()
{
int i,c;
int nr;
f>>n;
for(i=1;i<=n;i++)
{
f>>a[i];
}
f>>m;
for(i=1;i<=m;i++)
{
f>> c >> nr;
if(c==0)cautbin0(nr);
if(c==1)cautbin1(nr);
if(c==2)cautbin2(nr);
}
return 0;
}