Pagini recente » Cod sursa (job #3223514) | Cod sursa (job #1567121) | Cod sursa (job #1550592) | Cod sursa (job #155464) | Cod sursa (job #1569583)
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin("cautbin.in");
ofstream fout("cautbin.out");
int n,m;
int v[100010];
int BS_0(int nr) // ultimul pozitie a numarului nostru in vector
{
int st = 1, dr = n, last = -1;
while (st <= dr)
{
int m = (st + dr) / 2;
if (v[m] <= nr)
{
last = m;
st = m + 1;
}
else
dr = m - 1;
}
if (last == -1)
return - 1;
return (v[last] == nr) ? last : -1;
}
int BS_1(int nr) // upper_bound
{
int st = 1, dr = n, last = -1;
while(st<=dr)
{
int m = (st + dr) / 2;
if(v[m]<=nr){
last = m;
st=m+1;
}
else
dr=m-1;
}
return last;
}
int BS_2(int nr) //lower_bound
{
int st = 1, dr = n, last = -1;
while(st<=dr)
{
int m = (st + dr) / 2;
if(v[m]>=nr){
last = m;
dr=m-1;
}
else
st=m+1;
}
return last;
}
int main()
{
fin>>n;
for(int i=1; i<=n; i++)
fin>>v[i];
fin>>m;
for(int i=1; i<=m; i++)
{
int tip,nr,x;
fin>>tip>>nr;
if(tip==0)
fout<<BS_0(nr)<<"\n";
else if(tip==1)
fout<<BS_1(nr)<<"\n";
else
fout<<BS_2(nr)<<"\n";
}
}