解题思路:利用哈希表存储数据的位置,然后利用二分法减少时间复杂度,空间换时间。

注意事项:注意数据的存储结构

参考代码:

import java.util.*;

public class Main {
   public static void main(String[] args) {
       Scanner scan = new Scanner(System.in);
       int n = scan.nextInt(); // 数组长度
       int m = scan.nextInt(); // 查询次数
       int x = scan.nextInt(); // 目标异或值
       int[] arr = new int[n + 1]; // 数组,从1开始存储
       Map<Integer, List<Integer>> map = new HashMap<>();

       // 输入数组,并记录每个值的索引
       for (int i = 1; i <= n; i++) {
           arr[i] = scan.nextInt();
           if (!map.containsKey(arr[i])) {
               map.put(arr[i], new ArrayList<>());
           }
           map.get(arr[i]).add(i);
       }

       // 处理每个查询
       while (m-- > 0) {
           int l = scan.nextInt(); // 查询区间左端点
           int r = scan.nextInt(); // 查询区间右端点
           boolean flag = false;

           for (int i = l; i <= r; i++) {
               int target = arr[i] ^ x;
               if (map.containsKey(target)) {
                   List<Integer> list = map.get(target);
                   // 使用二分查找检查是否存在索引在 [l, r] 内
                   int low = 0, high = list.size() - 1;
                   while (low <= high) {
                       int mid = (low + high) / 2;
                       int idx = list.get(mid);
                       if (idx >= l && idx <= r && idx != i) { // 确保不是同一个元素
                           flag = true;
                           break;
                       } else if (idx < l) {
                           low = mid + 1;
                       } else {
                           high = mid - 1;
                       }
                   }
                   if (flag) {
                       break;
                   }
               }
           }

           System.out.println(flag ? "yes" : "no");
       }

       scan.close();
   }
}

点赞(0)
 

0.0分

0 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 0 条评论

暂无评论