Mai intai trebuie sa te autentifici.
Cod sursa(job #898518)
Utilizator | Data | 28 februarie 2013 10:34:03 | |
---|---|---|---|
Problema | Cautare binara | Scor | 20 |
Compilator | cpp | Status | done |
Runda | Arhiva educationala | Marime | 1.12 kb |
#include <iostream>
#include <fstream>
using namespace std;
fstream fin("cautbin.in",ios::in);
fstream fout("cautbin.out",ios::out);
int i,t,a,N,M,n[100001];
long zero(int a){
int st,dr,mij;
st=1;dr=N+1;
while(st<=dr){
mij=st+(dr-st)/2;
if(a<n[mij]) { dr=mij-1;}
if(a>=n[mij]) { st=mij+1;}}
mij=(st+dr)/2;
if(n[mij]>a)mij--;
if(a==n[mij])return mij;else return -1;}
long unu(int a){
int st,dr,mij;
st=1;dr=N;
while(st<dr){
mij=(st+dr)/2;
if(a>=n[mij]) { st=mij+1;}
if(a<n[mij]){ dr=mij;}}
if(n[mij]>a)--mij;
if(a>=n[mij])return mij;;}
long doi(int a){
int st,dr,mij;
st=1;dr=N+1;
while(st<dr){
mij=(st+dr)/2;
if(n[mij]<a)st=mij+1;
else dr=mij;}
mij=(st+dr)/2;
if(n[mij]<a)++mij;
return mij;}
int main(){
fin>>N;
for(i=1;i<=N;i++){fin>>n[i];}
fin>>M;
for(i=1;i<=M;i++){fin>>t>>a;
if(t==0){fout<<zero(a)<<endl;}
if(t==1){fout<<unu(a)<<endl;}
if(t==2){fout<<doi(a)<<endl;}}
fin.close();
fout.close();
return 0;
}