Cod sursa(job #1946265)
Utilizator | Data | 30 martie 2017 00:09:12 | |
---|---|---|---|
Problema | Cautare binara | Scor | 100 |
Compilator | cpp | Status | done |
Runda | Arhiva educationala | Marime | 1.29 kb |
#include <fstream>
using namespace std;
ifstream f("cautbin.in");
ofstream g("cautbin.out");
int N,M,i,st,dr,mij,pozMax;
unsigned int a[100001],q;
unsigned p;
int main()
{
f>>N;
for(i=1;i<=N;i++)
f>>a[i];
f>>M;
for(i=1;i<=M;i++){
f>>p>>q;
if(p==0){
st=1,dr=N;
while(st<=dr){
mij=(st+dr)/2;
if(a[mij]>q)dr=mij-1;
else st=mij+1;
}
mij=(st+dr)/2;
if(a[mij]>q)mij--;
if(a[mij]==q)g<<mij<<"\n";
else g<<-1<<"\n";
}else if(p==1){
st=1,dr=N;
while(st<dr){
mij=(st+dr)/2;
if(a[mij]>q)dr=mij;
else st=mij+1;
}
mij=(dr+st)/2;
if(a[mij]>q)
--mij;
g<<mij<<"\n";
}else if(p==2){
st=1,dr=N;
while(st<dr){
mij=(st+dr)/2;
if(a[mij]<q)
st=mij+1;
else
dr=mij;
}
mij=(st+dr)/2;
if(a[mij]<q)
++ mij;
g<<mij<<"\n";
}
}
}