#include<stdio.h>
int cautBin(int v[], int inf, int sup, int cautat)
{
int mijloc;
if (inf > sup) return -1;
mijloc=(inf+sup)/2;
if( v[mijloc] == cautat)
return mijloc;
else
{
if( v[mijloc] > cautat)
return cautBin(v, inf, mijloc-1, cautat);
else
return cautBin(v, mijloc + 1, sup, cautat);
}
}
int cautBinPozMax(int v[], int inf, int sup, int cautat)
{
int mijloc;
while( inf <= sup)
{
mijloc = ( inf + sup)/2;
if( v[mijloc] <= cautat) // daca gasete valoarea marim limita inferioara pentru a vedea daca avem mai avem pe o poz, cu indice mai mare val cautata
inf = mijloc + 1;
else
sup = mijloc - 1;
}
mijloc = (inf + sup)/2;
//daca nu gaseste valoare pe o poz cu indice mai mare, decrementam mijlocul
if( v[mijloc] > cautat)
mijloc--;
if( v[mijloc] == cautat)
return mijloc;
return -1;
}
int cautBinPozMin(int v[], int inf, int sup, int cautat)
{
int mijloc;
while( inf <= sup)
{
mijloc = ( inf + sup)/2;
if( v[mijloc] >= cautat) // daca gasete valoarea marim limita inferioara pentru a vedea daca avem mai avem pe o poz, cu indice mai mare val cautata
sup = mijloc - 1;
else
inf = mijloc + 1;
}
mijloc = (inf + sup)/2;
//daca nu gaseste valoare pe o poz cu indice mai mare, decrementam mijlocul
if( v[mijloc] < cautat)
mijloc++;
if( v[mijloc] == cautat)
return mijloc;
return -1;
}
int main()
{
FILE *inputFile, *outputFile;
inputFile=fopen("cautbin.in", "r");
outputFile=fopen("cautbin.out", "w");
int n,m, tip, v[100000],i,x;
int cautat1, cautat2, cautat3, cautat;
int intermediar2, intermediar3;
fscanf(inputFile, "%d", &n);
for(i=0; i<n; i++)
{
fscanf(inputFile, "%d", &v[i]);
}
fscanf(inputFile, "%d", &m);
for(i=0; i<m; i++)
{
fscanf(inputFile, "%d", &tip);
fscanf(inputFile, "%d", &x);
if( tip == 0)
{
cautat1 = cautBinPozMax(v, 0, n-1, x);
fprintf(outputFile, "%d\n", cautat1 +1 );
}
if( tip == 1)
{
cautat = cautBinPozMax(v, 0, n-1, x);
cautat2 = cautBinPozMax(v, 0, cautat, x);
fprintf(outputFile, "%d\n", cautat2 +1 );
}
if( tip == 2)
{
cautat = cautBin(v, 0, n-1, x);
cautat3= cautBinPozMin(v, cautat, n-1, x);
fprintf(outputFile, "%d\n", cautat3 +1);
}
}
return 0;
/*int x=cautBin1(v, 0, n-1, 3);
fprintf(outputFile, "%d ", x+1);
//pentru cerinta a doua
int r=5;
int p=cautBin(v, 0, n-1, 5);
printf("%d", p);
int q=cautBin1(v, 0, p, 3);
printf("%d", q);
int w=cautBin(v, 0, n-1, 1);
printf("%d", w);
int cautat3=cautBin2(v,w, n-1, 3);
printf("%d", cautat3);
return 0;*/
}