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

【二分】BISHI89 山峰数组计数

思路

求解代码

publicstaticvoidmain(String[]args)throwsIOException{// 使用BufferedReader读取输入,使用PrintWriter输出结果BufferedReaderbr=newBufferedReader(newInputStreamReader(System.in));PrintWriterout=newPrintWriter(newOutputStreamWriter(System.out));// 读取整数n,表示数组的长度intn=Integer.parseInt(br.readLine().trim());// 创建长度为n的数组P,用于存储输入的数值long[]P=newlong[n];// 创建长度为n+1的前缀和数组preSum,preSum[0]=0long[]preSum=newlong[n+1];// 读取一行输入,按空格分割成字符串数组String[]s=br.readLine().trim().split("\\s+");// 计算前缀和for(inti=0;i<n;i++){// 将字符串转换为长整型并存入数组PP[i]=Long.parseLong(s[i]);// 计算前缀和,preSum[i+1]表示前i个元素的和preSum[i+1]=preSum[i]+P[i];}// 初始化总和变量totallongtotal=0;// 遍历数组,从第2个元素开始到倒数第2个元素for(intj=2;j<n;j++){// 计算limit1,即(preSum[j]-1)/2longlimit1=(preSum[j]-1)/2;// 计算limit2,即2*preSum[j]-preSum[n]-1longlimit2=2*preSum[j]-preSum[n]-1;// 取limit1和limit2中的较小值作为阈值longthreshold=Math.min(limit1,limit2);// 如果阈值大于等于第一个元素的前缀和if(threshold>=preSum[1]){// 调用upper函数计算符合条件的元素个数intcount=upper(preSum,1,j-1,threshold);// 将count累加到total中total+=count;}}// 输出最终结果out.println(total);// 刷新输出流,确保所有输出都被写入out.flush();// 关闭输出流,释放资源out.close();// 关闭输入流,释放资源br.close();}/** * 在有序数组中查找最后一个小于等于目标值的元素的位置,并返回满足条件的元素个数 * @param preSum 有序数组,表示前缀和数组 * @param left 查找范围的左边界 * @param right 查找范围的右边界 * @param target 目标值 * @return 返回在[left, right]范围内小于等于target的元素个数 */privatestaticintupper(long[]preSum,intleft,intright,longtarget){intlow=left,high=right;// 初始化查找范围的左右边界intans=0;// 初始化答案变量// 执行二分查找while(low<=high){intmid=low+((high-low)>>1);// 计算中间值,使用位运算优化替代除法// 这种写法可以避免(low+high)可能导致的整数溢出问题// 检查中间值是否满足条件if(preSum[mid]<=target){// 如果中间值小于等于目标值ans=mid;// 更新答案为当前位置low=mid+1;// 在右半部分继续查找}else{// 如果中间值大于目标值high=mid-1;// 在左半部分继续查找}}// 返回结果:如果找到满足条件的元素,返回其个数;否则返回0returnans>0?(ans-left+1):0;}
http://www.jsqmd.com/news/432924/

相关文章:

  • 从实验室到产业化:噬菌体展示技术发展与应用全景
  • 手把手教你学Simulink——基于Simulink的PMSM矢量控制(FOC)d=0策略仿真
  • 杆状病毒-昆虫细胞表达系统解析:多角体启动子驱动的超表达与蛋白复合物组装机制
  • Cassandra vs MongoDB:大数据场景下的最佳选择
  • 大数据领域CAP定理的关键要点
  • 从Actor Critic到PPO算法
  • 最小二乘问题详解12:三角化中的非线性优化
  • 数据库事务机制
  • 【第1章·第20节】H无穷控制器MATLAB建模与仿真2——建模与仿真
  • Spring Boot接口防抖秘籍:告别“手抖”,守护数据一致性
  • 新ubuntu服务器常用软件包的安装配置
  • php方案 config.m4编译配置
  • 开发者必看:2026跨端生态白皮书发布,PC流量新红利在哪里?
  • php方案 内存分配策略(emalloc/pemalloc)
  • php方案 自定义对象handlers
  • 2026年3月反渗透膜厂家推荐,产能专利环保三维数据透视 - 品牌鉴赏师
  • 系统架构设计中的 15 个关键取舍 - 智慧园区
  • 多线程的事务你知道怎么回滚吗
  • 讲讲为什么索引可以让查询变快
  • 探索永磁同步电机双矢量模型预测控制的魅力
  • 2026年3月空气能大型热水器厂商推荐,精准检测与稳定性能深度解析 - 品牌鉴赏师
  • 论服务网格(Service Mesh)的应用
  • 2026年3月空气能热水器商用厂家推荐,批量采购优质供应商 - 品牌鉴赏师
  • Python做一个记事本
  • Python json serialize write 100M items to json via batch
  • 分享1个盈利初步优秀的图片 SaaS AI 套壳站 和 一个关键词一个页面
  • RustFS性能调优实战:把对象存储性能压榨到极致!
  • MiniRAG + LLM (三)
  • DeepSeek新论文“双通道”,让AI服务器的闲置带宽重新活过来了
  • 2026大专国际经济与贸易学数据分析的价值分析