Cod sursa(job #382858)
#include <fstream>
using namespace std;
ifstream f("cautbin.in");
ofstream g("cautbin.out");
const unsigned int SIZE=100000;
#define INF 0x7fffffff;
int v[SIZE];
struct
{
int op;
int numar;
}operatii;
int n;
int m;
typedef unsigned char tip_op;
int return_pozitie(int start,int end,int element,tip_op tip)
{
if(start==end)
if(tip==0)
{
if(v[start]==element)
return start;
else
return -1;
}
else if(tip==1)
{
if(v[start]<=element)
return start;
else
return -1;
}
else if(tip==2)
{
if(v[start]>=element)
return start;
else
return INF;
}
int mijloc=start+(end-start)/2;
int p1=return_pozitie(start,mijloc,element,tip);
int p2=return_pozitie(mijloc+1,end,element,tip);
if(tip==1 || tip==0)
return (p1>p2?p1:p2);
else if(tip==2)
return (p1<p2?p1:p2);
}
int main()
{
f>>n;
for(int i=1; i<=n; i++)
f>>v[i];
f>>m;
for(int i=1; i<=m; i++)
{
f>>operatii.op>>operatii.numar;
g<<return_pozitie(1,n,operatii.numar,operatii.op)<<endl;
}
return 0;
}