Pagini recente » Cod sursa (job #909993) | Cod sursa (job #1636328) | Cod sursa (job #9802) | Cod sursa (job #2951486) | Cod sursa (job #2719159)
#include <bits/stdc++.h>
using namespace std;
const string FILENAME = "cautbin";
ifstream fin(FILENAME + ".in");
ofstream fout(FILENAME + ".out");
int n, m;
int a[100001];
int bs0(int x)
{
int st = 1, dr = n, mid, ans = -1;
while(st <= dr)
{
mid = (st + dr) >> 1;
if(a[mid] == x)
{
st = mid + 1;
ans = mid;
}
else if(a[mid] > x)
dr = mid - 1;
else st = mid + 1;
}
return ans;
}
int bs1(int x)
{
int st = 1, dr = n, mid, ans = -1;
while(st <= dr)
{
mid = (st + dr) >> 1;
if(a[mid] <= x)
{
st = mid + 1;
ans = mid;
}
else
dr = mid - 1;
}
return ans;
}
int bs2(int x)
{
int st = 1, dr = n, mid, ans = -1;
while(st <= dr)
{
mid = (st + dr) >> 1;
if(a[mid] >= x)
{
dr = mid - 1;
ans = mid;
}
else st = mid + 1;
}
return ans;
}
int main()
{
int op, x;
fin >> n;
for(int i = 1; i <= n; i++)
fin >> a[i];
fin >> m;
while(m--)
{
fin >> op >> x;
if(op == 0)
fout << bs0(x) << "\n";
else if(op == 1)
fout << bs1(x) << "\n";
else fout << bs2(x) << "\n";
}
fin.close();
fout.close();
return 0;
}