Pagini recente » Cod sursa (job #530592) | Cod sursa (job #1450245) | Cod sursa (job #2614623) | Cod sursa (job #2388934) | Cod sursa (job #2171022)
#include <fstream>
using namespace std;
const int N = 100001, L = 16;
ifstream fin("cautbin.in");
ofstream fout("cautbin.out");
int v[N], n;
int caut0(int x)
{
int r = 0, pas = 1 << L;
while(pas){
if(r + pas <= n && v[r + pas] <= x){
r += pas;
}
pas /= 2;
}
if(r == 0 || v[r] < x){ ///folosim doar daca nu il cautam pe 1
r = -1;
}
return r;
}
int caut1(int x)
{
int r = 0, pas = 1 << L;
while(pas != 0){
if(r + pas <= n && v[ r + pas ] <= x){
r += pas;
}
pas /= 2;
}
return r;
}
int caut2(int x)
{
int r = 0, pas = 1 << L;
while(pas != 0){
if(r + pas <= n && !(v[r + pas] >= x)){
r += pas;
}
pas /= 2;
}
r++;
return r;
}
int main()
{
int nrc, c, x;
fin >> n;
for(int i = 1; i <= n; i++){
fin >> v[i];
}
fin >> nrc;
for(int j = 0; j < nrc; j++){
fin >> c >> x;
if(c == 0){
fout << caut0(x) << "\n";
}
else if(c == 1){
fout << caut1(x) << "\n";
}
else if(c == 2){
fout << caut2(x) << "\n";
}
}
return 0;
}