Pagini recente » Cod sursa (job #667795) | Cod sursa (job #1781591) | Cod sursa (job #72476) | Cod sursa (job #1053668) | Cod sursa (job #2022002)
#include <bits/stdc++.h>
using namespace std;
ifstream f("cautbin.in");
ofstream g("cautbin.out");
const int NMax = 100001;
int a[NMax], b[NMax];
int n, x, v, m;
int nr0(int n, int a[], int v)
{
int i, j;
i = 1; j = n;
int mijl;
while(i <= j)
{
mijl = (i + j) / 2;
if(v == a[mijl] && i != n)
{
if(v < a[mijl + 1])
return mijl;
else if(v == a[mijl + 1])
i = mijl + 1;
}
else if(v == a[mijl] && i == n)
return mijl;
else if(v > a[mijl] && i != n)
i = mijl + 1;
else if(v < a[mijl] && i != n)
j = mijl - 1;
}
return -1;
}
int nr1(int n, int a[], int v)
{
int i, j;
i = 1; j = n;
int mijl;
while(i <= j)
{
mijl = (i + j) / 2;
if(v >= a[mijl] && i != n)
{
if(v < a[mijl + 1])
return mijl;
else if(v >= a[mijl + 1])
i = mijl + 1;
}
else if(v >= a[mijl] && i == n)
return mijl;
else if(v < a[mijl] && i != n)
j = mijl - 1;
}
}
int nr2(int n, int a[], int v)
{
int i, j;
i = 1; j = n;
int mijl;
while(i <= j)
{
mijl = (i + j) / 2;
if(v <= a[mijl] && j != 1)
{
if(v > a[mijl - 1])
return mijl;
else if(v <= a[mijl - 1])
j = mijl - 1;
}
else if(v <= a[mijl] && j == 1)
return mijl;
else if(v > a[mijl] && j != 1)
i = mijl + 1;
}
}
int main()
{
f >> n;
for(int i = 1; i <= n; ++i)
f >> a[i];
f >> m;
for(int i = 1; i <= m; ++i)
{
f >> x;
f >> v;
if(x == 0) g << nr0(n, a, v) << '\n';
if(x == 1) g << nr1(n, a, v) << '\n';
if(x == 2) g << nr2(n, a, v) << '\n';
}
}