Pagini recente » Cod sursa (job #2127493) | Cod sursa (job #1568172) | Cod sursa (job #904507) | Cod sursa (job #195636) | Cod sursa (job #395111)
Cod sursa(job #395111)
#include <iostream>
#include <cstdio>
using namespace std;
#define MAX 100000
int vec[MAX],n;
int search1(int v){
int beg=0,end=n-1,mdl,f;
while(beg<=end){
mdl=beg+(end-beg)/2;
if(v==vec[mdl]){
if(vec[mdl+1]!=v){
return mdl;
}else{
beg=mdl+1;
}
}else if(v<vec[mdl]){
end=mdl-1;
}else{
beg=mdl+1;
}
}
return -2;
}
int search2(int v){
int beg=0,end=n-1,mdl;
while(beg<=end){
mdl=beg+(end-beg)/2;
if(v==vec[mdl]){
if(vec[mdl+1]>v&&vec[mdl]>=v){
return mdl;
}else{
beg=mdl+1;
}
}else if(v<vec[mdl]){
end=mdl-1;
}else{
beg=mdl+1;
}
}
return mdl;
}
int search3(int v){
int beg=0,end=n-1,mdl;
while(beg<=end){
mdl=beg+(end-beg)/2;
if(v>=vec[mdl]){
if(vec[mdl-1]<v){
return mdl;
}else{
end=mdl-1;
}
}else if(v<vec[mdl]){
end=mdl-1;
}else{
beg=mdl+1;
}
}
}
int main(){
FILE* fin=fopen("cautbin.in","r");
int m,o,x;
fscanf(fin,"%d",&n);
for(int i=0;i<n;i++){
fscanf(fin,"%d",&vec[i]);
}
fscanf(fin,"%d",&m);
for(int i=0;i<m;i++){
fscanf(fin,"%d %d",&o,&x);
switch(o){
case 0:
printf("%d\n",search1(x)+1);
break;
case 1:
printf("%d\n",search2(x)+1);
break;
case 2:
printf("%d\n",search3(x)+1);
break;
default:
continue;
}
}
fclose(fin);
return 0;
}