Pagini recente » Cod sursa (job #2665944) | Cod sursa (job #1017140) | Cod sursa (job #1401097) | Cod sursa (job #2623764) | Cod sursa (job #2590544)
#include <fstream>
using namespace std;
ifstream in("cautbin.in");
ofstream out("cautbin.out");
const int L = 16;
const int N = 100001;
int n, m, x, v[N], op, pas;
int caut0(int x)
{
int r = 0;
pas = 1 << L; // Cea mai mare putere a lui 2
while(pas != 0)
{
if(r + pas <=n && v[r+pas] <= x)
r += pas;
pas /= 2;
}
if(v[r] < x)
return -1;
return r;
}
int caut1(int x)
{
int r = 0;
pas = 1 << L; // Cea mai mare putere a lui 2
while(pas != 0)
{
if(r + pas <=n && v[r+pas] <= x)
r += pas;
pas /= 2;
}
//if(v[r] < x)
//return -1;
return r;
}
int caut2(int x)
{
int r = 0;
pas = 1 << L; // Cea mai mare putere a lui 2
while(pas != 0)
{
if(r + pas <=n && v[r+pas] < x)
r += pas;
pas /= 2;
}
//if(v[r] < x)
//return -1;
r++;
return r;
}
int main()
{
in>>n;
for(int i=1 ;i<=n; i++)
in>>v[i];
in>>m;
for(int i=1; i<=m; i++)
{
in>>op>>x;
if(op == 0)
out<<caut0(x)<<'\n';
else if(op == 1)
out<<caut1(x)<<'\n';
else if(op == 2)
out<<caut2(x)<<'\n';
}
return 0;
}