Pagini recente » Cod sursa (job #266548) | Cod sursa (job #2932085) | Cod sursa (job #2471952) | Cod sursa (job #2811145) | Cod sursa (job #3130632)
#include <fstream>
#include <iostream>
using namespace std;
ifstream fin("cautbin.in");
ofstream fout("cautbin.out");
const int NMAX = 1e5;
int v[NMAX+5], n;
class query {
private:
short task;
int x, solution;
void task1()
{
int left = 1, right = n;
solution = -1;
while (left <= right) {
int middle = (left+right)/2;
if (v[middle] < x) left = middle+1;
else if (v[middle] > x) right = middle-1;
else solution = middle, left = middle+1;
}
}
void task2()
{
int left = 1, right = n;
while (left <= right) {
int middle = (left+right)/2;
if (v[middle] <= x) solution = middle, left = middle+1;
else right = middle-1;
}
}
void task3()
{
int left = 1, right = n;
while (left <= right) {
int middle = (left+right)/2;
if (v[middle] >= x) solution = middle, right = middle-1;
else left = middle+1;
}
}
public:
void read()
{
fin>>task>>x;
}
void solve()
{
task++;
if (task == 1) task1();
if (task == 2) task2();
if (task == 3) task3();
}
void print()
{
fout<<solution<<'\n';
}
};
int main()
{
int m;
query q;
fin>>n;
for (int i = 1; i <= n; i++) fin>>v[i];
fin>>m;
while (m--) q.read(), q.solve(), q.print();
return 0;
}