Pagini recente » Cod sursa (job #1182871) | Cod sursa (job #1696212) | Cod sursa (job #3131123) | Cod sursa (job #2916974) | Cod sursa (job #2617103)
#include <bits/stdc++.h>
using namespace std;
#define ll long long
int n,m,question,x;
int bsearch(int a[], int x){
int l=1,r=n;
while (l<=r){
int mid = l+(r-l)/2;
if (a[mid]==x && (a[mid+1]!=x || mid+1>n))
return mid;
else if (a[mid]<=x) l=mid+1;
else r=mid-1;
}
return -1;
}
int lwr_bound(int a[], int x){
int l=1,r=n;
while (l<=r){
int mid = l+(r-l)/2;
if (a[mid]<=x && (a[mid+1]>x || mid+1>n))
return mid;
else if (a[mid]<=x) l=mid+1;
else r=mid-1;
}
}
int upp_bound(int a[], int x){
int l=1, r=n;
while (l<=r){
int mid=l+(r-l)/2;
if (a[mid]>=x && (a[mid-1]<x || mid-1==0))
return mid;
else if (a[mid]>=x) r=mid-1;
else l=mid+1;
}
}
int main()
{
//ifstream cin("cautbin.in");
//ofstream cout("cautbin.out");
ios_base::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
cin>>n;
int a[n+1];
for (int i=1; i<=n; i++)
cin>>a[i];
cin>>m;
while(m--){
cin>>question>>x;
if(question==0) cout<<bsearch(a,x)<<"\n";
else if (question==1) cout<<lwr_bound(a,x)<<"\n";
else cout<<upp_bound(a,x)<<"\n";
}
return 0;
}