Pagini recente » Cod sursa (job #2849072) | Cod sursa (job #1315770) | Cod sursa (job #979008) | Cod sursa (job #2061020) | Cod sursa (job #797587)
Cod sursa(job #797587)
#include <stdio.h>
#include <stdlib.h>
using namespace std;
int n,a[100000],m,x,y,i;
int zer(int lo,int hi,int y)
{int mid;
while(lo<=hi)
{mid=lo+(hi-lo)/2;
if(a[mid]<=y)lo=mid+1;
else hi=mid-1;
}
mid=lo+(hi-lo)/2;
if(a[mid]>y)mid--;
if(a[mid]==y)return mid;
return -1;
}
int one(int lo,int hi,int y)
{
int mid;
while(lo<hi)
{mid=lo+(hi-lo)/2;
if(a[mid]<=y) lo=mid+1;
else hi=m;
}
mid=lo+(hi-lo)/2;
if(a[mid]>y)mid--;
return mid;
}
int two(int lo,int hi,int y)
{
int mid;
while(lo<hi)
{
mid=lo+(hi-lo)/2;
if(a[mid]<y)lo=mid+1;
else hi=mid;
}
mid=lo+(hi-lo)/2;
if(a[mid]<y)mid++;
return mid;
}
int main()
{ freopen("cautbin.in","r",stdin);
freopen("cautbin.out","w",stdout);
scanf("%d", &n);
for(i=1;i<=n;i++)
scanf("%d",&a[i]);
scanf("%d",m);
while(m--)
{ x=0;y=0;
scanf("%d",&x,&y);
int k;
if(x==0) printf("%d\n",zer(1,n,y));
if(x==1) printf("%d\n",one(1,n,y));
if(x==2) printf("%d\n",two(1,n,y));
}
}