Pagini recente » Cod sursa (job #1362123) | Cod sursa (job #5570) | Cod sursa (job #2406202) | Cod sursa (job #2853713) | Cod sursa (job #1963146)
#include <fstream>
using namespace std;
ifstream cin("cautbin.in");
ofstream cout("cautbin.out");
int n,v[100000],x,i,m,c;
int c0(int st, int dr,int v[],int x)
{
int mij=(dr+st)/2;
while(st<=dr&&x!=mij)
{
if(v[mij]>x)
{
st=mij+1;
}
else
dr=mij-1;
mij=(st+dr)/2;
}
while(v[mij]==x)
mij++;
if(v[mij-1]!=x)
return -1;
return mij-1;
}
int c1(int st,int dr,int v[],int x)
{
int mij=(dr+st)/2;
while(st<=dr&&x>mij)
{
mij=(st+dr)/2;
if(v[mij]>x)
{
st=mij+1;
}
else
dr=mij-1;
mij=(st+dr)/2;
}
while(v[mij]<=x)
mij++;
return mij-1;
}
int c2(int st,int dr,int v[],int x)
{
int mij=(dr+st)/2;
while(st<=dr&&x<mij)
{
if(v[mij]>x)
{
st=mij+1;
}
else
dr=mij-1;
mij=(st+dr)/2;
}
while(v[mij]==x)
mij--;
return mij+1;
}
int main()
{
cin>>n;
for(i=1;i<=n;i++)
cin>>v[i];
cin>>m;
for(i=1;i<=m;i++)
{
cin>>c>>x;
if(c==0)
cout<<c0(1,n,v,x)<<"\n";
else
if(c==1)
cout<<c1(1,n,v,x)<<"\n";
else
cout<<c2(1,n,v,x)<<"\n";
}
return 0;
}