Pagini recente » Borderou de evaluare (job #133066) | Cod sursa (job #708078) | Cod sursa (job #2711311) | Cod sursa (job #2104349) | Cod sursa (job #1468290)
#include <bits/stdc++.h>
using namespace std;
int n,v[100000],m,x,c;
int caut_bin(int nr)
{
int st=1;
int dr=n;
int mij=(st+dr)/2;
while (v[mij]!=nr)
{
mij=(st+dr)/2;
if (v[st]==nr)
return st;
if (v[dr]==nr)
return dr;
if (nr>v[mij])
{
st=mij+1;
continue;
}
else
{
dr=mij-1;
continue;
}
}
if (v[mij]==nr)
{
while (v[mij]==v[mij+1])
++mij;
return mij;
}
else
return -1;
}
int caut_bin_1(int nr)
{
int st=1;
int dr=n;
int mij=(st+dr)/2;
while (!(v[mij]-nr>0 || v[mij-1]-nr<0) && v[mij]!=nr)
{
mij=(st+dr)/2;
if (v[mij]-nr>0)
{
dr=mij-1;
continue;
}
else
{
st=mij+1;
continue;
}
}
if (v[mij]==nr)
{
while (v[mij]==v[mij+1])
++mij;
}
return mij;
}
int caut_bin_2(int nr)
{
int st=1;
int dr=n;
int mij=(st+dr)/2;
while (!(v[mij]-nr>0 || v[mij-1]-nr<0) && v[mij]!=nr)
{
mij=(st+dr)/2;
if (v[mij]-nr>0)
{
st=mij+1;
continue;
}
else
{
dr=mij-1;
continue;
}
}
if (v[mij]==nr)
{
while (v[mij]==v[mij-1])
--mij;
}
return mij;
}
void citire()
{
scanf("%d",&n);
for (int i=1; i<=n; ++i)
scanf("%d",&v[i]);
scanf("%d",&m);
for (int j=1; j<=m; ++j)
{
scanf("%d%d",&c,&x);
if (c==0)
{
printf("%d\n",caut_bin(x));
continue;
}
if (c==1)
{
printf("%d\n",caut_bin_1(x));
continue;
}
if (c==2)
{
printf("%d\n",caut_bin_2(x));
}
}
}
int main()
{
freopen("cautbin.in","r",stdin);
freopen("cautbin.out","w",stdout);
citire();
return 0;
}