Pagini recente » Cod sursa (job #2489203) | Cod sursa (job #1367111) | Cod sursa (job #2929719) | Cod sursa (job #1076612) | Cod sursa (job #906407)
Cod sursa(job #906407)
#include <cstdio>
using namespace std;
int nr;
long mij,st,dr,n,m,i,ok=1;;
long long x,a[100001];
void binar()
{
if (nr==0)
{
st=1;
dr=n;
mij=(st+dr)/2;
while (st<=dr)
{
if(a[mij]==x)
{
if (a[mij+1]!=x) {printf("%ld \n",mij);ok=0;break;}
}
if (a[mij+1]<=x)
{st=mij+1;}
else
if (a[mij-1]>=x)
{dr=mij-1;}
if (a[mij-1]<x && a[mij+1]>x && a[mij]!=x) break;
mij=(st+dr)/2;
}
if (ok==1) printf("-1 \n");
ok=1;
}
if (nr==1)
{
st=1;
dr=n;
mij=(st+dr)/2;
while (st<=dr)
{
if (a[mij+1]==0) {printf("%ld \n",mij);break;}
if (a[mij+1]>x && a[mij]<=x) {printf("%ld \n",mij);break;}
if (a[mij+1]<=x)
{st=mij+1;}
else
if (a[mij-1]>=x)
{dr=mij-1;}
mij=(st+dr)/2;
}
}
if (nr==2)
{
st=1;
dr=n;
mij=(st+dr)/2;
while (st<=dr)
{
if (a[mij-1]<x && a[mij]>=x) {printf("%ld \n",mij);break;}
if (a[mij-1]>=x)
{dr=mij-1;}
else
if (a[mij+1]<=x)
{st=mij+1;}
mij=(st+dr)/2;
}
}
}
int main()
{
freopen("cautbin.in","rt",stdin);
freopen("cautbin.out","wt",stdout);
scanf("%ld",&n);
for(i=1;i<=n;i++)
{
scanf("%lld",&a[i]);
}
scanf("%ld",&m);
for (i=1;i<=m;i++)
{
scanf("%d",&nr);
scanf("%lld",&x);
binar();
}
return 0;
}