Cod sursa(job #2778592)
Utilizator | Data | 1 octombrie 2021 19:59:18 | |
---|---|---|---|
Problema | Cautare binara | Scor | 100 |
Compilator | cpp-64 | Status | done |
Runda | Arhiva educationala | Marime | 1.57 kb |
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin("cautbin.in");
ofstream fout("cautbin.out");
int main()
{
int n,m,B[100005],V[100005],M[100005],sol;
fin>>n;
for(int i = 1;i<=n;i++)
{
fin>>V[i];
}
fin>>m;
for(int i = 1;i<=m;i++)
{
fin>>M[i];
fin>>B[i];
}
for(int i = 1;i<=m;i++)
{
int st = 1;
int dr = n;
sol = -1;
while(st<=dr)
{
int mid = st + (dr-st)/2;
if(M[i] == 0)
{
if(V[mid] == B[i])
{
sol = mid;
st = mid + 1;
}
if(V[mid] < B[i])
{
st = mid + 1;
}
if(V[mid] > B[i])
{
dr = mid - 1;
}
}
if(M[i] == 1)
{
if(V[mid] > B[i])
{
dr = mid - 1;
}
if(V[mid] <= B[i])
{
sol = mid;
st = mid + 1;
}
}
if(M[i] == 2)
{
if(V[mid] < B[i])
{
st = mid + 1;
}
if(V[mid] >= B[i])
{
sol = mid;
dr = mid - 1;
}
}
}
fout<<sol<<'\n';
}
}