Pagini recente » Cod sursa (job #1571513) | Cod sursa (job #2223280) | Cod sursa (job #447676) | Cod sursa (job #3213026) | Cod sursa (job #372442)
Cod sursa(job #372442)
#include<stdio.h>
#define dim 100100
int a[dim],n,m,i,k;
int caut1(int x)
{
int st=1,dr=n;
int p=(st+dr)/2;
while(st<=dr)
{
p=(st+dr)/2;
if(a[p]<x)
st=p;
else
if(a[p]>x)
dr=p;
if(a[p]==x)
{
while(a[p+1]==x)
p++;
return p;
}}
return -1;
}
int caut2(int x)
{
int st=1,dr=n,p=(st+dr)/2;
while(st<dr)
{
p=(st+dr)/2;
if(a[p]<x)
st=p;
else
if(a[p]>x)
dr=p;
else
{
while(a[p+1]==x)
p++;
return p;
}
}
return p-1;
}
int caut3(int x)
{
int st=1,dr=n,p=(st+dr)/2;
while(st<dr)
{
p=(st+dr)/2;
if(a[p]<x)
st=p;
else
if(a[p]>x)
dr=p;
else
{
while(a[p-1]==x)
p--;
return p;
}}
return p+1;
}
void read()
{
scanf("%d",&n);
for(int i=1;i<=n;i++)
scanf("%d",&a[i]);
}
void solve()
{
int x,y;
scanf("%d",&m);
for(int i=1;i<=m;i++)
{
scanf("%d%d",&x,&y);
if(x==0)
printf("%d\n",caut1(y));
if(x==1)
printf("%d\n",caut2(y));
if(x==2)
printf("%d\n",caut3(y));
}
}
int main ()
{
freopen("cautbin.in","r",stdin);
freopen("cautbin.out","w",stdout);
int n,i,k,m;
read();
solve();
return 0;
}