Nu aveti permisiuni pentru a descarca fisierul grader_test2.in
Cod sursa(job #2609453)
| Utilizator | Data | 2 mai 2020 17:36:29 | |
|---|---|---|---|
| Problema | Cautare binara | Scor | 0 |
| Compilator | cpp-64 | Status | done |
| Runda | Arhiva educationala | Marime | 1.13 kb |
#include <iostream>
#include <fstream>
using namespace std;
ifstream in("cautbin.in");
ofstream out("cautbin.out");
const int nmax=100000;
int n,m,a[nmax];
void cb(int x,double y){
int left=1, right=n,mid=n/2;
if(x==0){
while(left < right){
if(a[mid]<=y){
left=mid+1;
mid=(left + right)/2;
}
if(a[mid]>y){
right=mid-1;
mid=(left + right)/2;
}
}
if(a[mid]>y)mid--;
if(a[mid]==y){
out <<mid<<"\n";
}else out <<-1<<"\n";
}
if(x==1){
while(left < right){
if(a[mid]<=y){
left=mid+1;
mid=(left + right)/2;
}
if(a[mid]>y){
right=mid-1;
mid=(left + right)/2;
}
}
if(a[mid]>y)mid--;
if(a[mid]<=y){
out <<mid<<"\n";
}
}
if(x==2){
while(left < right){
if(a[mid]<y){
left=mid+1;
mid=(left + right)/2;
}
if(a[mid]>=y){
right=mid-1;
mid=(left + right)/2;
}
}
if(a[mid]<y)mid++;
if(a[mid]<=y){
out <<mid<<"\n";
}
}
}
int main(){
in >>n;
for(int i=1;i<=n;i++)
in>>a[i];
in >>m;
for(int i=1;i<=m;i++){
int x,y;
in >>x>>y;
cb(x,y);
}
return 0;
}
