Pagini recente » Cod sursa (job #18425) | Cod sursa (job #2367277) | Cod sursa (job #3200242) | Cod sursa (job #1786534) | Cod sursa (job #1150478)
#include <fstream>
using namespace std;
ifstream fin("cautbin.in");
ofstream fout("cautbin.out");
int n,a[100001],i,ex,v,m;
int CautMaxN(int v);
int CautMaxim(int v);
int CautMinim(int v);
int main()
{
fin>>n;
for(i=1;i<=n;i++)
fin>>a[i];
fin>>m;
for(i=1;i<=m;i++)
{
fin>>ex>>v;
if(ex==0)
{
fout<<CautMaxN(v)<<'\n';
}
if(ex==1)
{
fout<<CautMaxim(v)<<'\n';
}
if(ex==2)
{
fout<<CautMinim(v)<<'\n';
}
}
}
int CautMaxN(int v)
{
int i,x=-1,inc=1,sf=n,mij;
while(sf>=inc)
{
mij=(sf+inc)/2;
if(v==a[mij])
{
x=mij;
break;
}
else
{
if(v<a[mij])
sf=mij-1;
else
inc=mij+1;
}
}
if(x==-1)
return -1;
else
for(i=x;i<=n;i++)
if(a[i]!=a[x])
{
return i-1;
}
}
int CautMaxim(int v)
{
int i,x=-1,inc=1,sf=n,mij;
while(sf>=inc)
{
mij=(sf+inc)/2;
if(v<=a[mij])
{
x=mij;
break;
}
else
inc=mij+1;
}
if(x==-1)
return -1;
else
for(i=x;i<=n;i++)
if(a[i]>a[x])
{
return i-1;
}
return 0;
}
int CautMinim(int v)
{
int i,x=-1,inc=1,sf=n,mij;
while(sf>=inc)
{
mij=(sf+inc)/2;
if(v>=a[mij])
{
x=mij;
break;
}
else
sf=mij+1;
}
if(x==-1)
return -1;
else
for(i=x;i>=1;i--)
if(a[i]<a[x])
{
return i+1;
}
return 0;
}