Pagini recente » Cod sursa (job #2161164) | Cod sursa (job #2313997) | Cod sursa (job #728939) | Cod sursa (job #90334) | Cod sursa (job #382628)
Cod sursa(job #382628)
#include <fstream>
#include <iostream>
#include <iterator>
#include <string>
using namespace std;
#define PATH ""
ifstream f((string(PATH)+string("cautbin.in")).c_str());
ofstream g((string(PATH)+string("cautbin.out")).c_str());
const unsigned int SIZE=100000;
#define INF 0x7fffffff;
int v[SIZE];
struct
{
int op;
int numar;
}operatii[SIZE];
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[i].op>>operatii[i].numar;
for(int i=1; i<=m; i++)
// if(operatii[i].op==0)
g<<return_pozitie(1,n,operatii[i].numar,operatii[i].op)<<endl;
return 0;
}