Pagini recente » Cod sursa (job #522082) | Cod sursa (job #543065) | Cod sursa (job #1446397) | Cod sursa (job #2099658) | Cod sursa (job #1401170)
#include <bits/stdc++.h>
using namespace std;
ifstream f("cautbin.in");
ofstream g("cautbin.out");
vector<int> v;
int findX(int x){
int indx = 0;
for(int step = 1 << 30; step > 0; step >>= 1)
if(indx + step < v.size() && v[indx + step] <= x){
indx += step;
}
return (v[indx] == x) ? indx + 1 : -1;
}
int lwBound(int x){
int indx = 0;
for(int step = 1 << 30; step > 0; step >>= 1)
if(indx + step < v.size() && v[indx + step] <= x)
indx += step;
return 1 + indx;
}
int upBound(int x){
int indx = 0;
for(int step = 1 << 30; step > 0; step >>= 1)
if(indx + step < v.size() && v[indx + step] < x)
indx += step;
return 2 + indx;
}
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<<findX(x)<<'\n';
break;
case 1:
g<<lwBound(x)<<'\n';
break;
case 2:
g<<upBound(x)<<'\n';
break;
}
}
return 0;
}