Pagini recente » Cod sursa (job #2306820) | Cod sursa (job #149910) | Cod sursa (job #240981) | Cod sursa (job #3142498) | Cod sursa (job #2493699)
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin("cautbin.in");
ofstream fout("cautbin.out");
int n,M,i,x,a[100001],p;
void citire()
{
fin>>n;
for(i=1; i<=n; i++)
fin>>a[i];
fin>>M;
}
int cautbin0()
{
int ls=1,ld=n,m,r=-1;
if(a[ld]==x)return ld;
while(ls<ld)
{
m=(ls+ld)/2;
if(a[m]>x)ld=m;
else
{
ls=m+1;
if(a[m]==x)r=m;
}
}
return r;
}
int cautbin2()
{
int ls=1,ld=n,m;
while(ls<ld)
{
m=(ls+ld)/2;
if(a[m]<x)ls=m+1;
else ld=m;
}
if(a[m]<x)return m+1;
else return m;
}
int cautbin1()
{
int ls=1,ld=n,m;
if(a[ld]<=x)return ld;
while(ls<ld)
{
m=(ls+ld)/2;
if(a[m]<=x)ls=m+1;
else ld=m;
}
if(a[m]>x)return m-1;
return m;
}
int main()
{
citire();
for(i=1; i<=M; i++)
{
fin>>p>>x;
switch(p)
{
case 0:fout<<cautbin0();break;
case 1:fout<<cautbin1();break;
default:fout<<cautbin2();
}
fout<<'\n';
}
}