Pagini recente » Cod sursa (job #1128502) | Cod sursa (job #2127075) | Cod sursa (job #1583473) | Cod sursa (job #43536) | Cod sursa (job #1576438)
#include <fstream>
#include <iostream>
using namespace std;
ifstream f("cautbin.in");
ofstream g("cautbin.out");
const int NMax = 100005;
int n, m, a[NMax], x, job;
void Exist(int s, int d)
{
int m;
while(s < d)
{
m = (s+d)/2;
if(a[m] > x) d = m-1;
else s = m+1;
}
m = (s+d)/2;
if(a[m] != x) m--;
if(a[m] == x) g<<m<<'\n';
else g<<-1<<'\n';
}
void Small(int s, int d)
{
int m;
while(s < d)
{
m = (s+d)/2;
if(a[m] > x) d = m-1;
else s = m+1;
}
m = (s+d)/2;
if(a[m] > x) m--;
g<<m<<'\n';
}
void Big(int s, int d)
{
int m;
while(s < d)
{
m = (s+d)/2;
if(x <= a[m]) d = m-1;
else s = m+1;
}
m = (s+d)/2;
if(a[m] < x) m++;
g<<m<<'\n';
}
void Solve()
{
while(m--)
{
f>>job>>x;
if(job == 0) Exist(1,n);
if(job == 1) Small(1,n);
if(job == 2) Big(1,n);
}
}
void Read()
{
f>>n;
for(int i = 1; i <= n; i++) f>>a[i];
f>>m;
}
int main()
{
Read();
Solve();
return 0;
}