Cod sursa(job #1998535)
Utilizator | Data | 8 iulie 2017 12:25:36 | |
---|---|---|---|
Problema | Cautare binara | Scor | 0 |
Compilator | cpp | Status | done |
Runda | Arhiva educationala | Marime | 1.34 kb |
#include <iostream>
#include <fstream>
using namespace std;
int main()
{ ifstream f("cautbin.in");
ofstream g("cautbin.out");
int N, M, i, j, k, x, y, v[100000];
f>>N;
for(i=1;i<=N;i++)
f>>v[i];
f>>M;
for(j=1;j<=M;j++){
f>>y>>x;
if(y==0){
int st=1,dr=N;
while(st<=dr){
int mid=st+(dr-st)/2;
if(x<v[mid])
dr=mid-1;
else
st=mid+1;
}
if(v[dr]==x)
g<<dr;
else
g<<"-1";
}
if(y==1){
int st=1,dr=N;
while(st<=dr){
int mid=st+(dr-st)/2;
if(x<v[mid])
dr=mid-1;
else
st=mid+1;
}
g<<dr;
}
if(y==2){
int st=1,dr=N;
while(st<=dr){
int mid=st+(dr-st)/2;
if(x<v[mid])
dr=mid-1;
else
st=mid+1;
}
if(v[dr]<x)
g<<st;
else
{
while(v[dr]==x)
dr--;
}
g<<dr+1;
}
g<<endl;
}
return 0;
}