Pagini recente » Cod sursa (job #2554024) | Cod sursa (job #2863928) | Cod sursa (job #519617) | Cod sursa (job #1565989) | Cod sursa (job #2074998)
#include <iostream>
#include <fstream>
using namespace std;
int valslen;
int vals[100041];
int binSearch(int n, int lg, int t)
{
int pos = 0;
for(; lg > 0; lg >>= 1){
if(vals[pos + lg] <= n && pos + lg <= valslen){
pos += lg;
}
}
if((pos == 0 || vals[pos] != n) && t == 0){
return -1;
}
return pos;
}
int invBinSearch(int n, int lg)
{
int pos = lg;
for(; lg > 0; lg >>= 1){
if(vals[pos - lg] >= n && pos - lg > 0){
pos -= lg;
}
}
return pos;
}
int main()
{
ifstream fin("cautbin.in");
ofstream fout("cautbin.out");
int m, t, v;
int lg;
fin >> valslen;
for(lg = 1; lg <= valslen; lg <<= 1);
for(int i = 1; i <= valslen; i++){
fin >> vals[i];
}
fin >> m;
for(int i = 1; i <= m; i++){
fin >> t >> v;
if(t == 2){
fout << invBinSearch(v, lg);
}else{
fout << binSearch(v, lg, t);
}
fout << " ";
}
return 0;
}