Pagini recente » Cod sursa (job #2548940) | Cod sursa (job #855129) | Cod sursa (job #1026564) | Cod sursa (job #1156483) | Cod sursa (job #243543)
Cod sursa(job #243543)
#include<stdio.h>
#define N 100001
void citire(),rez0(long),rez1(long),rez2(long);
long n,m,a[N];
int main (){
freopen("cautbin.in","r",stdin);
freopen("cautbin.out","w",stdout);
citire();
return 0;
}
void citire(){
long x,y,i;
scanf("%ld",&n);
for (i=1;i<=n;i++) scanf("%ld",&a[i]);
scanf("%ld",&m);
for (i=1;i<=m;i++) scanf("%ld %ld",&x,&y);
if (x==0) rez0(y);
else
if (x==1) rez1(y);
else rez2(y);
}
void rez0(long y){
long s,d,mij,i;
s=1;d=n;
for (;s<=d;){
mij=s+d/2;
if (a[mij]==y)break;
else
if (a[mij]>y) d=mij-1;
else s=mij+1;
}
if (s>d) printf("%ld\n",-1);
else{
for (i=mij;a[i]==y;i++);
printf("%ld\n",i);}
}
void rez1(long y){
long s,d,mij,i;
s=1;d=n;
for (;s<=d;){
mij=s+d/2;
if (a[mij]==y)break;
else
if (a[mij]>y) d=mij-1;
else s=mij+1;
}
for (i=mij;a[i]==y;i--);
if (a[mij]==i) printf("%ld\n",i);
else printf("%ld\n",i-1);
}
void rez2(long y){
long s,d,mij,i;
s=1;d=n;
for (;s<=d;){
mij=s+d/2;
if (a[mij]==y)break;
else
if (a[mij]>y) d=mij-1;
else s=mij+1;
}
for (i=mij;a[i]==y;i++);
if (a[mij]==i) printf("%ld\n",i);
else printf("%ld\n",i+1);
}