Pagini recente » Cod sursa (job #1056279) | Cod sursa (job #1825135) | Cod sursa (job #2804156) | Cod sursa (job #2299830) | Cod sursa (job #343968)
Cod sursa(job #343968)
#include<stdio.h>
#define dim 1001
int a[dim] , n , m , tip ,nr;
int caut0(int nr)
{
int st , dr , mid , val=-1;
for( st=1 , dr=n ; st<=dr ;)
{
mid=(st+dr)/2;
if (nr==a[mid])
if(mid>=val)
{
val=mid ;
break;
}
else
st=mid+1;
else
dr=mid-1;
}
if(val!=-1)
while(a[val]==a[val+1]&& a[val]==nr && val!=-1)
val++;
return val;
}
int caut1(int nr)
{
int st , dr , mid , val=n+1;
for( st=1 , dr=n ; st<=dr ;)
{
mid=(st+dr)/2;
if (nr==a[mid])
{
if(mid>=val)
{
val=mid ;
break;
}
else
if(a[mid-1]<=nr || a[mid+1]>=nr)
{
val=mid-1;
break;
}
}
else if (nr<a[mid])
st=mid+1;
else
dr=mid-1;
}
if(val!=-1 && a[val]==nr)
while(a[val]==a[val+1]&& a[val]==nr && val!=-1)
val++;
return val;
}
int caut2(int nr)
{
int st , dr , mid , val=-1;
for( st=1 , dr=n ; st<=dr ;)
{
mid=(st+dr)/2;
if (nr==a[mid] )
{
val=mid ;
break;
}
else
if( a[mid-1]<=nr && a[mid+1]>=nr)
{
val=mid+1;
break;
}
else if (nr<a[mid])
st=mid+1;
else
dr=mid-1;
}
while(a[val]==a[val-1] && a[val]==nr && val!=-1)
val--;
return val;
}
void solve()
{
for(int k=1 ; k<=m;k++)
{
scanf("%d%d",&tip,&nr);
if(tip==0)
printf("%d\n",caut0(nr));
else
if(tip==1)
printf("%d\n",caut1(nr));
else
printf("%d\n",caut2(nr));
}
}
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);
solve();
}