Cod sursa(job #3174766)
Utilizator | Data | 25 noiembrie 2023 09:51:24 | |
---|---|---|---|
Problema | Cautare binara | Scor | 0 |
Compilator | cpp-64 | Status | done |
Runda | Arhiva educationala | Marime | 1.76 kb |
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin ("cautbin.in");
ofstream fout ("cautbin.out");
int main()
{
int n, m, v[1000], p, x, ans;
fin>>n;
for (int i=1; i<=n; i++){
fin>>v[i];
}
fin>>m;
int i=n/2;
for (int j=1; j<=m; j++){
fin>>p>>x;
int left=1, right=n;
if (p==0){
ans=-1;
while (v[i]!=x || v[i+1]==x){
if (v[i]==x){
i++;
}
else if(v[i]<x){
left=i;
i=(left+right)/2;
}
else if(v[i]>x){
right=i;
i=(left+right)/2;
}
}
if (v[i]==x){
fout<<i;
}
else{
cout<<ans;
}
}
if (p==1){
ans=-1;
while (v[i]<=x && v[i+1]<=x){
if (v[i]==x){
i++;
}
else if(v[i]<x){
left=i;
i=(left+right)/2;
}
else if(v[i]>x){
right=i;
i=(left+right)/2;
}
}
fout<<i;
}
if (p==2){
ans=-1;
while (v[i]>=x && v[i-1]>=x){
if (v[i]==x){
i--;
}
else if(v[i]<x){
left=i;
i=(left+right)/2;
}
else if(v[i]>x){
right=i;
i=(left+right)/2;
}
}
fout<<i;
}
fout<<endl;
}
return 0;
}