Pagini recente » Cod sursa (job #2819626) | Cod sursa (job #332323) | Cod sursa (job #986210) | Cod sursa (job #1895248) | Cod sursa (job #1401111)
#include <bits/stdc++.h>
using namespace std;
ifstream f("cautbin.in");
ofstream g("cautbin.out");
vector<int> v;
int findX(int x){
int l = 0, r = v.size() - 1, m;
while(r != l){
m = (l + r) / 2;
if(x >= v[m])
l = m + 1;
else
r = m - 1;
}
if(v[m] == x)
return m;
else if(v[l] == x)
return l;
else
return -1;
}
int lwBound(int x){
int l = 0, r = v.size() - 1, m;
while(l != r) {
m = (l + r) / 2;
if(v[m] <= x)
l = m + 1;
else
r = m - 1;
}
if(v[l] == x)
return l;
else
return m;
}
int upBound(int x){
int l = 0, r = v.size() - 1, m;
while(l != r) {
m = (l + r) / 2;
if(v[m] < x)
l = m + 1;
else
r = m - 1;
}
if(v[l] == x)
return l;
else
return m;
}
int main()
{
int n, type, x;
f>>n;
while(n--)
f>>x,
v.push_back(x);
f>>n;
while(n--){
f>>type>>x;
switch (type) {
case 0:
g<<1 + findX(x)<<'\n';
break;
case 1:
g<<1 + lwBound(x)<<'\n';
break;
case 2:
g<<1 + upBound(x)<<'\n';
break;
}
}
return 0;
}