Pagini recente » Cod sursa (job #2260098) | Cod sursa (job #2752642) | Cod sursa (job #1666238) | Cod sursa (job #116324) | Cod sursa (job #876945)
Cod sursa(job #876945)
#include<fstream>
using namespace std;
#define Max 100004
ifstream fin("cautbin.in");
ofstream fout("cautbin.out");
unsigned int N,M,poz[3],X,aux;
unsigned long long V[Max];
void cb0(int left,int right){
if(left<=right){
int mid = left + (right-left)/2;
if(V[mid]<X){
cb0(mid+1,right);
}
if(V[mid]>X){
cb0(left,mid-1);
}
if(V[mid]==X){
poz[0]=mid;
cb0(mid+1,right);
}
}
}
void cb1(int left, int right){
if(left<=right){
int mid = left + (right-left)/2;
if(V[mid]<=X){
poz[1]=mid;
cb1(mid+1,right);
}
if(V[mid]>X){
cb1(left,mid-1);
}
}
}
void cb2(int left, int right){
if(left<=right){
int mid = left + (right-left)/2;
if(V[mid]>=X){
poz[2]=mid;
cb2(left,mid-1);
}
if(V[mid]<X){
cb2(mid+1,right);
}
}
}
int main(){
fin>>N;
for(unsigned int i=1;i<=N;i++){
fin>>V[i];
}
fin>>M;
for(unsigned int i=1;i<=M;i++){
fin>>aux>>X;
poz[0]=0;
if(aux==0)
cb0(1,N);
if(aux==1)
cb1(1,N);
if(aux==2)
cb2(1,N);
if(aux==0 && !poz[0])
fout<<"-1\n";
else
fout<<poz[aux]<<"\n";
}
return 0;
}