Pagini recente » Cod sursa (job #1374848) | Cod sursa (job #1054129) | Cod sursa (job #1821931) | Cod sursa (job #2514640) | Cod sursa (job #2053976)
#include <fstream>
using namespace std;
ifstream cin("cautbin.in");
ofstream cout("cautbin.out");
const int nm=100000;
int v[nm+5],n,m,a,b;
void bs0(int x)
{
int poz=-1;
int st=1,dr=n,med;
while(1)
{
med=(st+dr)/2;
if(v[med]==x)
{
if(v[med+1]!=x)
{
poz=med;
break;
}
st=med+1;
continue;
}
if(st==dr)
break;
if(v[med]<x)
st=med+1;
else
dr=med-1;
}
cout<<poz<<"\n";
}
void bs1(int x)
{
int poz;
int st=1,dr=n,med;
while(st<=dr)
{
med=(st+dr)/2;
if(v[med]==x)
{
if(v[med+1]!=x)
{
poz=med;
break;
}
st=med+1;
continue;
}
if(v[st]<x and x<v[st+1])
{
poz=st;
break;
}
if(st==dr)
{
poz=st;
break;
}
if(v[med]<x)
st=med+1;
else
dr=med-1;
}
cout<<poz<<"\n";
}
void bs2(int x)
{
int poz,st=1,dr=n,med;
while(1)
{
med=(st+dr)/2;
if(v[med]==x)
{
if(v[med-1]!=x)
{
poz=med;
break;
}
dr=med-1;
continue;
}
if(v[med]<x)
st=med+1;
else
dr=med-1;
}
cout<<poz<<"\n";
}
int main()
{
cin>>n;
for(int i=1;i<=n;i++)
cin>>v[i];
cin>>m;
for(int i=1;i<=m;i++)
{
cin>>a>>b;
if(a==0)bs0(b);
if(a==1)bs1(b);
if(a==2)bs2(b);
}
return 0;
}