Pagini recente » Cod sursa (job #1519903) | Cod sursa (job #2927423) | Cod sursa (job #160457) | Cod sursa (job #635311) | Cod sursa (job #2198989)
#include <iostream>
#include <fstream>
#define NMAX 100005
using namespace std;
ifstream f("cautbin.in");
ofstream g("cautbin.out");
int a[NMAX];
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, int dr)
{
if(st<dr){
int mid = st + (dr - st)/2;
if(a[mid] == x){
if(a[mid + 1] != x)
return mid;
else{
while(a[mid + 1] == a[mid])
mid++;
return mid;
}
}
else if(a[mid] < x)
return zero(x, mid + 1, dr);
else return zero(x, st, mid - 1);
}
}
int unu(int x, int st, int dr)
{
if(st<dr){
int mid = st + (dr - st)/2;
if(a[mid] <= x){
if(a[mid + 1] > x)
return mid;
else{
while(a[mid + 1] <= x)
mid++;
return mid;
}
}
else return unu(x, mid + 1, dr);
}
}
int doi(int x, int st, int dr)
{
if(st<dr){
int mid = st + (dr - st)/2;
if(a[mid] <= x){
if(a[mid + 1] > x)
return mid;
else{
while(a[mid - 1] >= a[mid] && a[mid - 1] <= x)
mid--;
return mid;
}
}
else return doi(x, mid + 1, dr);
}
}
void solve()
{
for(int i = 1;i <= m;i++){
f>>p>>x;
if(p==0)
g<<zero(x, 1, n)<<'\n';
else if(p == 1)
g<<unu(x, 1, n)<<'\n';
else g<<doi(x, 1, n)<<'\n';
}
}
int main()
{
citeste();
solve();
}