Pagini recente » Cod sursa (job #2525912) | Cod sursa (job #1081769) | Cod sursa (job #1984487) | Cod sursa (job #1804166) | Cod sursa (job #2075039)
#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(pos + lg <= valslen){
if(vals[pos + lg] <= n){
pos += lg;
}
}
}
if((pos == 0 || vals[pos] != n) && t == 0){
return -1;
}
return pos;
}
int invBinSearch(int n, int lg)
{
int pos = valslen;
for(; lg > 0; lg >>= 1){
if(pos - lg > 0){
if(vals[pos - lg] >= n){
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 << "\n";
}
return 0;
}