CF1878E
比较典的题。
我们知道与运算的一个性质:对于任意自然数
那么对于一段区间
这就满足了二分的单调性。此时整个算法的复杂度在
所以我们的问题变成了如何在
这是典型的区间问题,很自然的想到 ST 表或是线段树。
那么问题得解。最终时间复杂度
#define int long long
const int N = 1e6 + 5;
namespace Jelly {
int n, q;
int tree[N << 2], a[N];
void Build(int x, int l, int r) {
if(l == r) {
tree[x] = a[l];
return ;
}
int mid = l + r >> 1;
Build(x << 1, l, mid);
Build(x << 1 | 1, mid + 1, r);
tree[x] = tree[x << 1] & tree[x << 1 | 1];
}
int Query(int l, int r, int x, int L, int R) {
if(r < L || l > R) return INT_MAX;
if(L <= l && r <= R) return tree[x];
int mid = l + r >> 1;
return Query(l, mid, x << 1, L, R) & Query(mid + 1, r, x << 1 | 1, L, R);
}
int main() {
Read(n);
for(int i = 1; i <= n; i ++) Read(a[i]);
Build(1, 1, n);
Read(q);
while(q --) {
int lft, k;
Read(lft, k);
int l = lft, r = n;
if(a[lft] < k) {
Write(-1, ' ');
continue;
}
while(l < r) {
int mid = l + r + 1 >> 1;
if(Query(1, n, 1, lft, mid) >= k) l = mid;
else r = mid - 1;
}
Write(l, ' ');
}
Writeln();
return 0;
}
}
signed main() {
int T = 1;
Read(T);
while(T --) Jelly::main();
return 0;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具