当前位置: 首页 > news >正文

【二分】BISHI85 【模板】整数域二分

思路

求解代码

publicstaticvoidmain(String[]args)throwsIOException{// 使用BufferedReader读取输入,PrintWriter输出结果BufferedReaderbr=newBufferedReader(newInputStreamReader(System.in));PrintWriterout=newPrintWriter(newOutputStreamWriter(System.out));// 读取第一行输入,分割成字符串数组String[]strA=br.readLine().trim().split("\\s+");// 解析数组长度n和查询次数qintn=Integer.parseInt(strA[0]);intq=Integer.parseInt(strA[1]);// 创建数组a并读取输入数据int[]a=newint[n];String[]strB=br.readLine().trim().split("\\s+");for(inti=0;i<n;i++){a[i]=Integer.parseInt(strB[i]);}// 对数组进行排序,为后续查询做准备Arrays.sort(a);// 处理q次查询while(q-->0){// 读取每次查询的左右边界String[]strC=br.readLine().trim().split("\\s+");intl=Integer.parseInt(strC[0]);intr=Integer.parseInt(strC[1]);// 使用二分查找计算下界和上界intleft=lowerBound(a,l);intright=upperBound(a,r);// 输出结果:范围内的元素个数out.println(right-left);}// 关闭IO资源out.flush();out.close();br.close();}/** * 二分查找下界函数 * * @param a 已排序的数组 * @param target 目标值 * @return 第一个大于等于target的元素的索引 */privatestaticintlowerBound(int[]a,inttarget){// 初始化查找范围的 low 和 high 指针// low 从数组的起始位置 0 开始// high 从数组长度开始(不包括该位置)intlow=0,high=a.length;// 当 low 小于 high 时,继续查找// 这是循环查找的条件,确保查找范围有效while(low<high){// 计算中间位置 mid// 使用位运算 (high-low)>>1 代替除法 2,提高效率// 防止整数溢出,同时确保 mid 总是在 low 和 high 之间intmid=low+((high-low)>>1);// 如果中间位置的元素大于等于目标值// 说明目标值可能在左半部分,或者 mid 就是我们要找的位置// 因此将 high 设置为 mid,继续在左半部分查找if(a[mid]>=target){high=mid;}else{// 如果中间位置的元素小于目标值// 说明目标值一定在右半部分// 因此将 low 设置为 mid+1,继续在右半部分查找low=mid+1;}}// 当循环结束时,low 指向第一个大于等于 target 的元素的位置// 如果所有元素都小于 target,则返回数组长度returnlow;}/** * 二分查找上界函数 * * @param a 已排序的数组 * @param target 目标值 * @return 第一个大于target的元素的索引 */privatestaticintupperBound(int[]a,inttarget){// 初始化查找范围的左右边界,左边界为0,右边界为数组长度intlow=0,high=a.length;// 当左边界小于右边界时,继续查找while(low<high){// 计算中间位置,使用位运算防止溢出intmid=low+((high-low)>>1);// 如果中间位置的值大于目标值,则上界在左半部分if(a[mid]>target){high=mid;}else{// 否则上界在右半部分,且不包括中间位置low=mid+1;}}// 返回第一个大于target的元素的索引returnlow;}
http://www.jsqmd.com/news/425399/

相关文章:

  • 《深度解析!Agentic AI在智能制造潜力,提示工程架构师视角揭秘》
  • AI原生应用开发:Llama模型的10个高级用法
  • SVG Stroke 属性详解
  • 数据仓库监控体系搭建:从ETL到查询全链路监控
  • SQL ROUND() 函数详解
  • 解读大数据领域结构化数据的管理模式
  • 华为OD机考双机位C卷 - Alice的安全旅行 (Java Python JS GO C++ C)
  • 基于双层优化与二阶锥松弛模型的电动汽车时空调度策略:在MATLAB环境中的配电网研究
  • 从MVP到规模化:AI原生应用的成长路径
  • 2026年最受欢迎的三亚海鲜餐厅TOP5推荐,带你畅享鲜美海味盛宴
  • Aspose.Total for .NET 2026全系列来了,官方包
  • day100(3.1)——leetcode面试经典150
  • 2026年三亚湘菜餐厅对比推荐,必尝五大经典美味,让你领略湘味魅力
  • AI赋能,AI应用架构师重塑渠道管理格局
  • COMSOL氩气双层介质阻挡放电模型——利用等离子体模块的探讨
  • 微信小程序 springboot_uniapp的坭兴陶文化传承与创新系统的设计与实现_a8uyn972
  • 微信小程序 springboot_uniapp的大学生兼职推荐系统的设计与实现_ly2blc52
  • 流水线贴膜机:PLC与触摸屏程序详解,适合初学者学习的简单控制工艺及运动控制教程(支持博图V1...
  • 指针核心训练-位操作-随笔
  • HDFS助力大数据领域的数据高效存储
  • 好写作AI:从目录到成文:好写作AI如何确保章节之间“血脉相连”
  • 微信小程序 springboot_uniapp的大学生校园生活服务系统的 二手 自习室 会议 失物招领40ifxo7d
  • 好写作AI:实证分析“鬼门关”:AI教你从“看着数据发呆”到“思路清晰”
  • 微信小程序 springboot_uniapp的共享停车场系统_4s3tl42j
  • 微信小程序 springboot_uniapp的共享充电桩系统_d40o1910
  • 好写作AI:人机协同建构法:让AI成为你论文的“批判性对话者”
  • 微信小程序 springboot_uniapp的农产品质量追溯系统_gkm0juhi
  • 大模型MCP开发实战:从理论到云原生部署的完整指南
  • Causal LM 和 Prefix LM 的区别
  • 芒格的“反向激励“分析在科技创业生态系统中的应用