Cod sursa(job #1089689)
Utilizator | Data | 21 ianuarie 2014 21:14:51 | |
---|---|---|---|
Problema | Cautare binara | Scor | 40 |
Compilator | cpp | Status | done |
Runda | Arhiva educationala | Marime | 2.02 kb |
#include<cstdio>
using namespace std;
FILE * fin=fopen("cautbin.in","r");
FILE * fout=fopen("cautbin.out","w");
long long v[100001],x,y;
int m,n,i,j,u,mid,p,nr;
int main(){
fscanf(fin,"%d",&n);
for(i=1;i<=n;i++){
fscanf(fin,"%lld",&v[i]);
}
fscanf(fin,"%d",&m);
for(i=1;i<=m;i++){
fscanf(fin,"%lld%lld",&y,&x);
if(y==0){
nr=1;
while(nr==1){
p=1;
u=n;
while(p<=u){
mid=(p+u)/2;
if(v[mid]<=x){
p=mid+1;
}else{
u=mid-1;
}
}
if(v[u]==x){
fprintf(fout,"%d\n",u);
break;
}else{
nr=0;
}
}
if(nr==0){
fprintf(fout,"-1\n");
}
}
if(y==1){
while(x>=1){
p=1;
u=n;
while(p<=u){
mid=(p+u)/2;
if(v[mid]<=x){
p=mid+1;
}else{
u=mid-1;
}
}
if(v[u]==x){
fprintf(fout,"%d\n",u);
break;
}else{
x--;
}
}
}
if(y==2){
while(x<=v[n]){
p=1;
u=n;
while(p<=u){
mid=(p+u)/2;
if(v[mid]>=x){
u=mid-1;
}else{
p=mid+1;
}
}
if(v[p]==x){
fprintf(fout,"%d\n",p);
break;
}else{
x++;
}
}
}
}
return 0;
}