Pagini recente » Cod sursa (job #2706301) | Cod sursa (job #2925750) | Cod sursa (job #3216877) | Cod sursa (job #3143911) | Cod sursa (job #825243)
Cod sursa(job #825243)
#include<fstream>
using namespace std;
ifstream fin("cautbin.in");
ofstream fout("cautbin.out");
int n, i, step, a[100000], x, j, val, m, sol;
int cautbin0(int val){
for(step=1; step<n; step<<=1);
for(i=0; step; step>>=1) if(i+step <= n && a[i+step] <= val) i+=step;
if(a[i] != val) sol = -1;
else sol = i;
fout << sol+1 << "\n";
}
int cautbin1(int val){
for(step=1; step<n; step<<=1);
for(i=0; step; step>>=1) if(i+step <= n && a[i+step] <= val) i+=step;
sol = i;
fout << sol+1 << "\n";
}
int cautbin2(int val){
for(step=1; step<n; step<<=1);
for(i=n; step; step>>=1) if(i-step >= 0 && a[i-step]>= val) i-=step;
sol = i;
fout << sol+1 << "\n";
}
int main(){
fin >> n;
for(j=0; j<n; j++){
fin >> a[j];
}
fin >> m;
for(j=0; j<m; j++){
fin >> x >> val;
if(x == 0) cautbin0(val);
else if(x == 1) cautbin1(val);
else if(x == 2) cautbin2(val);
}
fin.close();
fout.close();
return 0;
}