Pagini recente » Cod sursa (job #512687) | Cod sursa (job #399179) | Cod sursa (job #2559708) | Cod sursa (job #3141225) | Cod sursa (job #3141211)
#include <iostream>
#include <fstream>
#define ll long long
using namespace std;
ll v[100005], n;
int lowerBound(ll value)
{
int st=1, dr=n;
while (st<dr) {
int mij=(st+dr)/2;
if (v[mij]<value) st=mij+1;
else dr=mij;
}
return st;
}
int upperBound(ll value)
{
int st=1, dr=n;
while (st<dr) {
int mij=(st+dr+1)/2;
if (v[mij]<=value) st=mij;
else dr=mij-1;
}
return dr;
}
int main()
{
int m;
cin.tie(0);
cin.sync_with_stdio(false);
freopen("cautbin.in", "r", stdin);
freopen("cautbin.out", "w", stdout);
cin>>n;
for (int i=1; i<=n; i++) cin>>v[i];
cin>>m;
for (int q=1; q<=m; q++) {
ll op_type, value;
cin>>op_type>>value;
if (op_type==0) {
int index=upperBound(value);
if (v[index]==value) cout<<index<<'\n';
else cout<<-1<<'\n';
}
if (op_type==1) {
int index=upperBound(value);
cout<<index<<'\n';
}
if (op_type==2) {
int index=lowerBound(value);
cout<<index<<'\n';
}
}
return 0;
}