Pagini recente » Cod sursa (job #1325536) | Cod sursa (job #353934) | Istoria paginii utilizator/niutenisu | Cod sursa (job #1485792) | Cod sursa (job #1411414)
#include <iostream>
#include <stdio.h>
using namespace std;
int n,m,a[100001];
int cautbin0(int x, int p, int q)
{
if(p>q) return -1;
else
{
int m=p+(q-p)/2;
if(a[m]==x)
if(a[m+1]==x) return cautbin0(x,m+1,q);
else return m;
else
if(x<a[m]) return cautbin0(x,p,m-1);
else return cautbin0(x,m+1,q);
}
}
int cautbin1(int x, int p, int q)
{
int m=p+(q-p)/2;
if(x==a[m])
if(a[m+1]!=x) return m;
else cautbin1(x,m+1,q);
else
if(a[m]<x)
if(a[m+1]>x) return m;
else return cautbin1(x,m+1,q);
else
if(a[m-1]<x) return m-1;
else return cautbin1(x,p,m-1);
}
int cautbin2 (int x, int p, int q)
{
int m=p+(q-p)/2;
if(x==a[m])
if(a[m-1]!=x) return m;
else return cautbin2(x,p,m-1);
else
if(a[m]<x)
if(a[m+1]>x) return m+1;
else return cautbin2(x,m+1,q);
else
if(a[m-1]<x) return m;
else return cautbin2(x,p,m-1);
}
int main()
{
freopen("cautbin.in","r",stdin);
freopen("cautbin.out","w",stdout);
cin>>n;
for(int i=1;i<=n;i++) cin>>a[i];
cin>>m;
int tip,x;
for(int i=1;i<=m;i++)
{
cin>>tip>>x;
if(tip==0) cout<<cautbin0(x,1,n)<<"\n";
else
if(tip==1) cout<<cautbin1(x,1,n)<<"\n";
else
if(tip==2) cout<<cautbin2(x,1,n)<<"\n";
}
return 0;
}