Run ID 作者 问题 语言 测评结果 分数 时间 内存 代码长度 提交时间
36249 a+qazolite 【S】T1 C++ 编译错误 0 0 MS 0 KB 1494 2025-02-10 16:18:46

Tests(0/0):


// Author: Aquizahv #include <bits/stdc++.h> using namespace std; const int N = 1e6 + 5, LOGX = 32, ND = N * LOGX, DEP = 29; int n, a[N], Q, u, v; struct trie { int root, tot, son[ND][2], id[ND]; void insert(int &u, int i, int dep) { if (!u) u = ++tot; if (dep < 0) { id[u] = i; return; } insert(son[u][(a[i] >> dep) & 1], i, dep - 1); } int query(int u, int x, int dep, bool op) // 0: mn, 1: mx { if (dep < 0) return id[u]; int d = ((x >> dep) & 1) ^ op; if (son[u][d]) return query(son[u][d], x, dep - 1, op); return query(son[u][d ^ 1], x, dep - 1, op); } } t; int f(int x) { return (x ^ u) - v; } int main() { cin >> n >> Q; for (int i = 1; i <= n; i++) scanf("%d", a + i), t.insert(t.root, i, DEP); while (Q--) { scanf("%d%d", &u, &v); int l = t.query(t.root, u, DEP, 0), r = t.query(t.root, u, DEP, 1); // cout << l << ' ' << r << endl; if (l > r) swap(l, r); while (r - l > 1) { int mid = (l + r) >> 1; if (1ll * f(a[l]) * f(a[mid]) <= 0) r = mid; else l = mid; } printf("%d\n", 1ll * f(a[l]) * f(a[r]) <= 0 && 1 <= l && l <= n && 1 <= r && r <= n && l != r && ? l : -1); } return 0; }


测评信息: