Pagini recente » Cod sursa (job #311212) | Cod sursa (job #2212222) | Cod sursa (job #3030582) | Cod sursa (job #3173631) | Cod sursa (job #3342754)
#include <fstream>
using namespace std;
ifstream fin("cautbin.in");
ofstream fout("cautbin.out");
const int N = 1e5;
int v[N+1];
int cbeq (int n, int x){
int st = 1, dr = n, rez = -1;
while (st<=dr){
int m = (st+dr)/2;
if (v[m]<x){
st = m+1;
}
else if (v[m]>x){
dr = m-1;
}
else{
rez = m;
st = m+1;
}
}
return rez;
}
int cblow (int n, int x){
int st = 1, dr = n, rez = st-1;
while (st<=dr){
int m = (st+dr)/2;
if (v[m]<=x){
rez = m;
st = m+1;
}
else{
dr = m-1;
}
}
return rez;
}
int cbhigh(int n, int x){
int st = 1, dr = n, rez = dr+1;
while (st<=dr){
int m = (st+dr)/2;
if (v[m]>=x){
rez = m;
dr = m-1;
}
else{
st = m+1;
}
}
return rez;
}
int main(){
int n;
fin>>n;
for (int i = 1; i<=n; i++){
fin>>v[i];
}
int q;
fin>>q;
for (int i = 1; i<=q; i++){
int type, x;
fin>>type>>x;
if (type==0)
fout<<cbeq(n,x);
else if (type==1)
fout<<cblow(n,x);
else fout<<cbhigh(n,x);
fout<<'\n';
}
}