Pagini recente » Rating scarlat marius (marius004) | Profil UPB_Moraru_Tudor_Petrosanu | Cod sursa (job #718086) | Statistici Groza Viorel Mihai (grozaviorel) | Cod sursa (job #976776)
Cod sursa(job #976776)
#include<fstream>
using namespace std;
int n,a[100005],b[100005][3],m;
int main()
{
int i,st,dr,mij,x,y;
ifstream fin("cautbin.in");
ofstream fout("cautbin.out");
fin>>n;
for (i=1;i<=n;i++)
fin>>a[i];
fin>>m;
for (i=1;i<=m;i++)
{fin>>x>>y;
if (x==0)
{st=1;dr=n;
mij=(st+dr)/2;
while (st<dr && a[mij]!=y)
{if (a[mij]<y && mij<n)
st=mij+1;
if (mij>y && mij>1)
dr=mij-1;
mij=(st+dr)/2;
}
while (st<dr && a[mij+1]==y)
{if (a[mij]>y)
dr=mij-1;
else st=mij+1;
mij=(st+dr)/2;
}
if (st<dr)
fout<<mij<<"\n";
else fout<<"-1"<<"\n";
}
if (x==1)
{st=1;dr=n;
mij=(st+dr)/2;
while (st<dr && a[mij]!=y)
{if (a[mij]<y && mij<n)
st=mij+1;
if (mij>y && mij>1)
dr=mij-1;
mij=(st+dr)/2;
}
while (st<dr && a[mij+1]==y)
{if (a[mij]>y)
dr=mij-1;
else st=mij+1;
mij=(st+dr)/2;
}
if (st<dr)
fout<<mij<<"\n";
else if (a[mij]>y) fout<<mij-1<<"\n";
else fout<<mij<<"\n";
}
if (x==2)
{st=1;dr=n;
mij=(st+dr)/2;
while (st<dr && a[mij]!=y)
{if (a[mij]<y && mij<n)
st=mij+1;
if (mij>y && mij>1)
dr=mij-1;
mij=(st+dr)/2;
}
while (st<dr && a[mij-1]==y)
{if (a[mij]>y)
st=mij+1;
else dr=mij-1;
mij=(st+dr)/2;
}
if (a[mij]<y) fout<<mij+1<<"\n";
else fout<<mij<<"\n";
}
}
fin.close();
fout.close();
return 0;
}