Pagini recente » Cod sursa (job #2198782) | Cod sursa (job #2498661) | Cod sursa (job #2888651) | Cod sursa (job #281707) | Cod sursa (job #1411497)
#include <iostream>
#include <stdio.h>
using namespace std;
int n,m,a[100001];
int cautbin0(int x, int p, int q)
{
while(p<=q)
{
int m=p+(q-p)/2;
if(a[m]==x)
if(a[m+1]!=x) return m;
else p=m+1;
else
if(a[m]<x) p=m+1;
else q=m-1;
}
return -1;
}
int cautbin1(int x, int p, int q)
{
while(p<=q)
{
int m=p+(q-p)/2;
if(x==a[m])
if(a[m+1]!=x) return m;
else p=m+1;
else
if(a[m]<x)
if(a[m+1]>x) return m;
else p=m+1;
else
if(a[m-1]<=x) return m-1;
else q=m-1;
}
}
int cautbin2 (int x, int p, int q)
{
while(p<=q)
{
int m=p+(q-p)/2;
if(x==a[m])
if(a[m-1]!=x) return m;
else q=m-1;
else
if(a[m]<x)
if(a[m+1]>=x) return m+1;
else p=m+1;
else
if(a[m-1]<x) return m;
else q=m-1;
}
}
int main()
{
freopen("cautbin.in","r",stdin);
freopen("cautbin.out","w",stdout);
scanf("%d", &n);
for(int i=1;i<=n;i++) scanf("%d", &a[i]);
scanf("%d", &m);
int tip,x;
for(int i=1;i<=m;i++)
{
scanf("%d %d", &tip, &x);
if(tip==0) printf("%d \n", cautbin0(x,1,n));
if(tip==1) printf("%d \n", cautbin1(x,1,n));
if(tip==2) printf("%d \n", cautbin2(x,1,n));
}
return 0;
}