Cod sursa(job #3264721)
Utilizator | Data | 23 decembrie 2024 16:15:53 | |
---|---|---|---|
Problema | Cautare binara | Scor | 100 |
Compilator | cpp-64 | Status | done |
Runda | Arhiva educationala | Marime | 1.75 kb |
#include <iostream>
#include <fstream>
using namespace std;
ifstream f("cautbin.in");
ofstream g("cautbin.out");
const int NMAX = 100001;
int v[NMAX];
int main()
{
int n,m;
f>>n;
for(int i=1;i<=n;i++)
{
f>>v[i];
}
f>>m;
while(m--)
{
int tip, x;
f>>tip>>x;
if(tip == 0)
{
int l = 1, r = n, mij, pozMax = -1;
while(l<=r)
{
mij = (l+r)/2;
if(v[mij] == x)
{
pozMax = mij;
l = mij + 1;
}
else if(v[mij] < x)
{
l = mij + 1;
}
else
{
r = mij - 1;
}
}
g<<pozMax<<'\n';
}
else if(tip == 1)
{
int l = 1, r = n, mij, pozMax;
while(l<=r)
{
mij = (l+r)/2;
if(v[mij] <= x)
{
l = mij + 1;
pozMax = mij;
}
else
{
r = mij - 1;
}
}
g<<pozMax<<'\n';
}
else
{
int l=1,r=n,mij, pozMin;
while(l<=r)
{
mij = (l+r)/2;
if(v[mij] >= x)
{
r = mij - 1;
pozMin = mij;
}
else
{
l = mij + 1;
}
}
g<<pozMin<<'\n';
}
}
return 0;
}