Pagini recente » Cod sursa (job #2823671) | Cod sursa (job #987661) | Cod sursa (job #1028995) | Cod sursa (job #279767) | Cod sursa (job #371484)
Cod sursa(job #371484)
#include <fstream>
using namespace std;
int sir[100000],ls,m,v,N;
int binary_search(int beg,int end,int val){
v=val;
if(beg+1==end){
if(sir[beg]==val){
return beg;
}else if(sir[end]==val){
return end;
}else{
if(m==1){
for(int i=beg;i<N;i++){
if(sir[i]>=v){
ls=i;
}
}
}else if(m==2){
for(int i=end;i>=0;i--){
if(sir[i]>=v){
ls=i;
}
}
}
return -1;
}
}else{
int mdl=(end+beg)/2;
if(sir[mdl]==val){
return mdl;
}else if(sir[mdl]<val){
return binary_search(mdl,end,val);
}else if(sir[mdl]>val){
return binary_search(beg,mdl,val);
}
}
return -1;
}
int main(){
int M,x,op;
fstream fin("cautbin.in",ios::in);
fstream fout("cautbin.out",ios::out);
fin>>N;
for(int i=0;i<N;i++){
fin>>sir[i];
}
fin>>M;
for(int i=0;i<M;i++){
fin>>op>>x;
m=op;
if(op==0){
int pos=binary_search(0,N,x);
if(pos!=-1){
while(sir[pos+1]==x){
pos++;
}
}
fout<<pos+1<<endl;
}else if(op==1){
int pos=binary_search(0,N,x);
if(pos!=-1){
while(sir[pos+1]==x){
pos++;
}
}else{
pos=ls;
}
fout<<pos+1<<endl;
}else if(op==2){
int pos=binary_search(0,N,x);
if(pos!=-1){
while(sir[pos-1]==x){
pos--;
}
}else{
pos=ls;
}
fout<<pos+1<<endl;
}
}
fin.close();
fout.close();
return 0;
}