Pagini recente » Cod sursa (job #2856813) | Cod sursa (job #1055378) | Cod sursa (job #188555) | Cod sursa (job #3206496) | Cod sursa (job #2198991)
#include <bits/stdc++.h>
using namespace std;
ifstream f("cautbin.in");
ofstream g("cautbin.out");
int a[100005];
int n, m, p, x;
void citeste()
{
f>>n;
for(int i = 1;i <= n;i++)
f>>a[i];
f>>m;
}
int zero(int x)
{
int st = 1, dr = n;
int sol = - 1;
while(st <= dr && sol==-1)
{
int mid = st + (dr - st)/2;
if(a[mid] == x && (a[mid + 1] != x || mid + 1 > n))
sol = mid;
else if(x >= a[mid])
st = mid + 1;
else dr = mid - 1;
}
return sol;
}
int unu(int x)
{
int st = 1, dr = n;
int sol = - 1;
while(st <= dr && sol==-1)
{
int mid = st + (dr - st)/2;
if(a[mid] <= x && (a[mid + 1] > x || mid + 1 > n))
sol = mid;
else if(x >= a[mid])
st = mid + 1;
else dr = mid - 1;
}
return sol;
}
int doi(int x)
{
int st = 1, dr = n;
int sol = - 1;
while(st <= dr && sol==-1)
{
int mid = st + (dr - st)/2;
if(a[mid] >= x && (a[mid-1] < x || mid - 1 < 1))
sol = mid;
else if(x > a[mid])
st = mid + 1;
else dr = mid - 1;
}
return sol;
}
void solve()
{
for(int i = 1;i <= m;i++){
f>>p>>x;
if(p==0)
g<<zero(x)<<'\n';
else if(p == 1)
g<<unu(x)<<'\n';
else g<<doi(x)<<'\n';
}
}
int main()
{
citeste();
solve();
}