Pagini recente » Cod sursa (job #232656) | Cod sursa (job #1725175) | Cod sursa (job #1307224) | Cod sursa (job #2969654) | Cod sursa (job #2357948)
#include <bits/stdc++.h>
#define nmax 100005
using namespace std;
ofstream fout("cautbin.out");
ifstream fin("cautbin.in");
int a[nmax];
int n,m;
int cb0(int st, int dr, int x)
/// cauta pozitia numarului x
/// daca o gaseste, o returneaza
/// daca nu, returneaza -1
{
int mij;
while(st <= dr)
{
mij = (st+dr)/2;
if(x == a[mij]) return mij;
if(x > a[mij]) st = mij+1;
else dr = mij-1;
}
return -1;
}
int cb1(int st, int dr, int x)
/// cauta ultimul numar <= x
/// si ii returneaza pozitia
{
int mij;
while(st <= dr)
{
mij = (st+dr)/2;
if(x < a[mij]) dr = mij-1;
else st = mij+1;
}
return st-1;
}
int cb2(int st, int dr, int x)
/// cauta primul numar >= x
/// si ii returneaza pozitia
{
int mij;
while(st <= dr)
{
mij = (st+dr)/2;
if(x > a[mij]) st = mij+1;
else dr = mij-1;
}
return st;
}
void Solve()
{
int i,op,x;
fin >> n;
for(i = 1; i <= n; i++)
fin >> a[i];
fin >> m;
for(i = 1; i <= m; i++)
{
fin >> op >> x;
if(op == 0) fout << cb0(1,n,x) << "\n";
else if(op == 1) fout << cb1(1,n,x) << "\n";
else if(op == 2) fout << cb2(1,n,x) << "\n";
}
}
int main()
{
Solve();
fin.close();
fout.close();
return 0;
}