Pagini recente » Cod sursa (job #677472) | Cod sursa (job #1115642) | Cod sursa (job #2432327) | Cod sursa (job #1956860) | Cod sursa (job #2082349)
#include<bits/stdc++.h>
using namespace std;
int n,m,x;
int A[100100],y;
int bs0(int low, int high, int val) {
int mid;
while (low<=high) {
mid = (low+high)/2;
if (A[mid]<=val) low = mid+1;
else high = mid -1;
}
low--;
if (A[low] == val) return low;
else return -1;
}
int bs1(int low, int high, int val) {
int mid;
while (low<=high) {
mid = (low+high)/2;
if (A[mid]<=val) low = mid+1;
else high = mid -1;
}
low--;
if (A[low] <=val) return low;
else return -1;
}
int bs2(int low, int high, int val) {
int mid;
while (low<=high) {
mid = (low+high)/2;
if (A[mid]<val) low = mid+1;
else high = mid -1;
}
high++;
if (A[high] >=val) return high;
else return -1;
}
int main() {
ifstream cin("cautbin.in");
ofstream cout("cautbin.out");
cin>>n;
for (int i=0; i<n; i++) cin>>A[i];
cin>>m;
while (m--) {
cin>>y>>x;
switch (y) {
case 0: {
int rs = bs0(0,n-1, x);
if (rs==-1) cout<<"-1"<<endl;
else cout<<rs+1<<'\n';
break;
}
case 1:
cout<<bs1(0,n-1,x)+1<<'\n';
break;
case 2:
cout<<bs2(0,n-1,x)+1<<'\n';
break;
}
}
return 0;
}