Pagini recente » Cod sursa (job #1596597) | Cod sursa (job #738508) | Cod sursa (job #358040) | Cod sursa (job #3032971) | Cod sursa (job #2493693)
#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;
while(ls<ld)
{
m=(ls+ld)/2;
if(a[m]==x)ls=m;
else if(a[m]>x)ld=m-1;
else ls=m+1;
}
if(a[ld]==x)return ld;
return -1;
}
int cautbin2()
{
int ls=1,ld=n,m;
while(ls<ld)
{
m=(ls+ld)/2;
if(a[m]>x)ld=m-1;
else if(a[m]<x)ls=m+1;
else ld=m;
}
if(a[ld+1]>x&&a[ld]!=x)return ld+1;
return ld;
}
int cautbin1()
{
int ls=1,ld=n,m;
while(ls<ld)
{
m=(ls+ld)/2;
if(a[m]==x)ls=m;
else if(a[m]>x)ld=m-1;
else ls=m+1;
}
return ld;
}
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';
}
}