1. 抓娃娃-二分

发布时间:2026/9/15 11:07:21

1. 抓娃娃-二分 题目理解题目n 条线段m 个查询区间[L,R]。 如果某条线段至少一半长度落在查询区间[L,R]里面就代表这条线段被框住。求每个查询能框住多少条线段。证明 线段中点落在查询区间[L,R]说明中点被包住那么至少有半段线段在区间内 反过来如果线段有至少一半长度被查询区间包住那么中点一定落在查询区间内。 问题转化 把 n 条线段的中点全部拿出来排序。 对于每次查询[L,R]求排序后的中点数组里有多少个数落在区间[L,R]之间。 也就是二分查找找左边界≥L 的第一个位置、右边界≤R 最后一个位置个数 右 - 左 1题目0抓娃娃 - 蓝桥云课 (lanqiao.cn)因为这个限制所以不用担心线段比区间长线段一定比区间短的话想要判断是否线段的二分之一及以上在区间内则可以转化为线段中点是否在区间内的问题如果没有那个限制那么就无法这么考虑了因为即使中点在区间内也保证不了二分之一及以上在区间内最新题解#include bits/stdc.h #define int long long #define endl \n using namespace std; int n,m; // xian数组存储每条线段的中点可能是小数所以double // qu[m][0]是查询Lqu[m][1]查询R double xian[100005],qu[100005][2]; void solve(){ cinnm; for(int i1;in;i)// 下标从1开始方便二分边界处理因为二分要开区间 { int l,r; cinlr; // 计算中点必须除以2.0得到浮点数不能整数右移 1 // 如果写 (lr)/2 整数除法会丢失小数中点算错 xian[i](lr)/2.0; } // 对中点数组排序二分的前提xian[1]~xian[n] // 一定要1因为二分要开区间所以首地址和最后一个地址不存东西 sort(xian1,xian1n);// sort接收首地址、尾后地址 // 读入m个查询区间 for(int i0;im;i){ cinqu[i][0]qu[i][1]; } // 依次处理每个查询 for(int i0;im;i){ double L qu[i][0]; double R qu[i][1]; // 二分1找第一个 L 的中点位置 l // 最小化答案r始终走在可行区域 int l10,r1n1; // 二分区间 [0, n1)虚拟哨兵边界开区间 while(l11r1){ int midl1r11; // 等价 (l1r1)/2 if(xian[mid]L) r1mid; else l1mid; } int l r1; // l是满足中点L的最左下标 // 二分2找最后一个 R 的中点位置 r // 最大化答案l始终走在可行区域 l10,r1n1; while(l11r1){ int midl1r11; if(xian[mid]R) l1mid; else r1mid; } int r l1; // r是满足中点R的最右下标 // 数量r-l1 coutr-l1endl; } } signed main(){ ios::sync_with_stdio(0); cin.tie(0); cout.tie(0); solve(); return 0; }曾经题解#include bits/stdc.h #define int long long #define endl \n using namespace std; //区间包含线段的问题转化为区间包含点的问题 int n,m; void solve(){ cinnm; //线段的中点,注意要double类型因为计算中点可能有小数 vectordouble x(n); //区间的两个端点 vectorpairint,int y(m); for(int i0;in;i){ double a,b; cinab; x[i](ab)/2; } for(int i0;im;i){ //pair类型的第一个值和第二个值的获取方式 ciny[i].firsty[i].second; } //排序因为要二分二分必须要排序 sort(x.begin(),x.end()); //遍历每个区间 for(int i0;im;i){ //当前区间的两个端点 int Ly[i].first,Ry[i].second; //二分找出 符合条件(线段中点在区间内)的线段中点区间的左界限 int l10,r1n-1; while(l1r1){ int mid(l1r1)1; if(x[mid]L){ l1mid1; }else{ r1mid; } } //二分找出 符合条件(线段中点在区间内)的线段中点区间的右界限 int l20,r2n-1; while(l2r2){ int mid(l2r21)1; if(x[mid]R){ l2mid; }else{ r2mid-1; } } //要判断一下因为有可能该区间内一条符合的线段都没有 if(x[l1]Lx[l2]R){ coutl2-l11endl; }else{ cout0endl; } } } signed main(){ ios::sync_with_stdio(0); cin.tie(0); cout.tie(0); solve(); return 0; }笔记重点坑点总结考试必看中点不能用整数计算(lr)/2整数除法会舍去小数。必须写(lr)/2.0得到 double 浮点数。 例 l1,r2中点是 1.5整数除法得到 1直接出错。二分写法采用「开区间二分」l10r1n1哨兵边界数组下标从 1~n0 和 n1 是虚拟位置防止越界。第一个二分找第一个 ≥ L的元素左边界 lower_bound第二个二分找最后一个 ≤ R的元素右边界 upper_bound 变形也可以直接用 STL 自带二分函数简化代码不用手写二分auto left lower_bound(xian1,xian1n, L); auto right upper_bound(xian1,xian1n, R); int ans right-left;手写二分用来练习二分原理比赛推荐 STL代码短不容易写错。STL 简化版本对比参考更短#include bits/stdc.h #define int long long #define endl \n using namespace std; const int N1e510; double mid[N]; void solve(){ int n,m; cinnm; for(int i1;in;i){ int l,r; cinlr; mid[i](lr)/2.0; } sort(mid1,mid1n); while(m--){ int L,R; cinLR; // lower_bound第一个 L auto lp lower_bound(mid1,mid1n, L); // upper_bound第一个 R auto rp upper_bound(mid1,mid1n, R); cout rp-lp \n; } } signed main(){ ios::sync_with_stdio(0);cin.tie(0); solve(); return 0; }
延伸阅读

更多相关文章

2026/9/15 11:02:21

Semantica evals模块详解:如何科学评估知识图谱构建质量

Semantica evals模块详解:如何科学评估知识图谱构建质量 【免费下载链接】semantica Graph-Native Infrastructure for Context and Accountable AI Systems 项目地址: https://gitcode.com/GitHub_Trending/sema/semantica 构建知识图谱最头疼的不是"建…

2026/9/15 11:12:21

联邦学习结合知识蒸馏,解决入侵检测Non-IID数据难题

简介:这是一份基于联邦学习与知识蒸馏的网络入侵检测模型完整源码包,面向计算机、数学、电子信息等专业学生,可用于课程设计、期末大作业或毕业设计参考。项目在NSL-KDD数据集上完成验证,代码同时包含服务端与客户端协同训练框架、…

2026/9/15 11:12:21

SAP MM STO采购订单由于供应商工厂清空下成普通订单!

1、问题: 由于SAP 里面内部供应商对应的工厂被清空,采购订单下单时候变成普通订单,无装运点数据,影响业务! 2、解决方案: **修改EEKO表 将供应工厂RESWK字段为空改成供应商代码,然后前台更新采购…

2026/9/15 11:12:21

抖音批量下载 5 分钟跑通:从单条视频到整个收藏夹

抖音批量下载 5 分钟跑通:从单条视频到整个收藏夹 【免费下载链接】douyin-downloader A practical Douyin downloader for both single-item and profile batch downloads, with progress display, retries, SQLite deduplication, and browser fallback support. …

2026/9/15 4:54:30

拯救者Y7000黑屏故障排查与维修实战指南

1. 项目概述:一台黑屏的拯救者Y7000,到底卡在哪一步? 联想拯救者Y7000系列笔记本,从2018年第一代搭载i5-8300H开始,到后来的i7-9750H、i7-10750H、i5-11400H,再到2023年款的R7-7840HS,它始终是学…

2026/9/15 0:01:16

AI英语单词APP开发:自适应学习算法与移动端优化实践

1. 项目概述 作为一名在移动应用开发领域摸爬滚打多年的老手,我最近完成了一个AI英语单词APP的开发项目。这个项目将传统单词记忆方法与现代AI技术相结合,打造了一款能够智能适应不同用户学习习惯的英语学习工具。 市面上大多数单词APP都存在一个通病&a…

2026/9/15 0:01:16

Flutter与OpenHarmony结合开发手语学习APP实战

1. 项目背景与核心价值作为一名同时接触过Flutter和OpenHarmony的开发者,最近我完成了一个基于Flutter for OpenHarmony的手语学习APP实战项目。这个项目最大的特点在于实现了跨平台框架与国产操作系统深度结合的创新实践——用Flutter开发的应用能完美运行在OpenHa…

2026/9/15 0:01:16

六个月成为机器人工程师:从ROS2到SLAM的实战路径

1. 六个月的紧迫感从哪来:先搞清楚你要成为哪种机器人工程师说实话,六个月的期限并不是一个宽松的时间线。市面上任何一本正经的机器人学教材都超过五百页,ROS2的官方文档可以翻到你怀疑人生,再加上ABB、KUKA这些工业机器人厂家动…

2026/9/14 11:59:31

USB Type-C PCB布局分区设计:电源、高速信号与PD协议全攻略

做硬件这行,Type-C接口算是典型的“看着简单,做起来全坑”的东西。光引脚就24个,高低速信号、电源、控制线全部塞在一个小小的连接器里,如果PCB布局不做规划,打样回来基本就是“插上没反应”、“高速掉线”、“静电一打…

2026/9/14 13:53:59

系统编程学习原型如何补齐稳定性边界

系统编程学习原型如何补齐稳定性边界预算有限时&#xff0c;我先优化明显多余的复制&#xff0c;而不是猜测性地换容器。用借用传递只读数据通常就能减少分配&#xff1a; fn parse(line: &str) -> Result<Item, Error> { /* ... */ }用基准确认热点确实在分配&am…

2026/9/14 11:22:57

雨花区哪家财务公司代理记账比较好?

在雨花区&#xff0c;企业处理财税事务常常面临诸多挑战&#xff0c;选择一家靠谱的财务公司至关重要。湖南巨勤财务管理咨询有限公司就是本地正规实体财税服务机构&#xff0c;深耕本地工商财税行业多年&#xff0c;熟悉当地工商局、税务局最新政策与申报流程。主营公司注册、…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
咨询二维码