Pagini recente » Cod sursa (job #236659) | Cod sursa (job #2727987) | Cod sursa (job #2505113) | Cod sursa (job #479595) | Cod sursa (job #953915)
Cod sursa(job #953915)
#include<fstream>
using namespace std;
const int MAXN=100001;
int v[MAXN];
int n,m;
ifstream fin("cautbin.in");
ofstream fout("cautbin.out");
int search(int x,int opt)
{
int st=1,dr=n,mij,poz=0,i;
while (st<=dr)
{
mij=st+(dr-st)/2;
if (v[mij]==x)
{
poz=mij;
break;
}
if (x<v[mij])
dr=mij-1;
else if (x>v[mij])
st=mij+1;
}
if (!opt)
{
if (poz)
{
for (i=poz+1;i<=n && v[i]==v[poz];++i);
--i;
poz=i;
}
}
else if (opt==1)
{
if (poz)
{
for (i=poz+1;i<=n && v[i]==v[poz];++i);
--i;
poz=i;
}
else
poz=dr;
}
else if (opt==2)
{
if (poz)
{
for (i=poz-1;i<=n && v[i]==v[poz];--i);
++i;
poz=i;
}
else
poz=st;
}
return poz;
}
int main()
{
int i,opt,x;
fin>>n;
for (i=1;i<=n;++i)
fin>>v[i];
fin>>m;
for (i=0;i<m;++i)
{
fin>>opt>>x;
fout<<search(x,opt)<<'\n';
}
fin.close();
fout.close();
return 0;
}