Pagini recente » Rating Kovago Lajos (lotzy) | Cod sursa (job #1989280) | Cod sursa (job #811443) | Statistici Fota David (fotadavid23) | Cod sursa (job #2642835)
#include <bits/stdc++.h>
using namespace std;
typedef unsigned long long ull;
typedef long long ll;
struct my_timer{
chrono::time_point<chrono::high_resolution_clock> start;
my_timer():
start(chrono::high_resolution_clock::now()){}
~my_timer(){
std::chrono::duration<double> diff = chrono::high_resolution_clock::now() - start;
clog<<diff.count()<<"s\n";
}
};
int vec[100000];
int under_upper(int end, int val){
int ret = 0;
for(int i = 16; i;)
-- i, ret |= ((ret | (1 << i)) < end && vec[ret | (1 << i)] <= val) << i;
return ret;
}
int lower_bound(int end, int val){
int ret = 0;
while(end > 0){
int step;
int mid = ret + (step = (end >> 1));
if(vec[mid] < val)
ret = ++mid, end -= step + 1;
else
end = step;
}
return ret;
}
int main()
{
freopen("a.in", "r", stdin);
freopen("a.out", "w", stdout);
int n;
scanf("%d", &n);
for(int i = 0; i != n; ++ i)
scanf("%d", &vec[i]);
int m;
scanf("%d", &m);
for(int i = 0; i != m; ++ i){
int c, val;
scanf("%d%d", &c, &val);
if(c == 2)
printf("%d\n", lower_bound(n, val) + 1);
else{
int pos = under_upper(n, val);
if(vec[pos] == val || c == 1)
printf("%d\n", pos + 1);
else
printf("-1\n");
}
}
}