1. 抓娃娃-二分

发布时间:2026/11/2 22:23:28

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/11/1 16:52:52

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

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

2026/11/2 22:19:31

联邦学习最新进展与落地实践:破解数据孤岛与隐私保护

1. 联邦学习为什么突然成了AI圈的“显学”在IJCAI的多次会议上,杨强反复强调一个判断:AI落地最大的障碍不是模型不够强,而是数据走不出各自的“围墙”。这一点我深有体会。过去几年跟银行、医院、制造企业打交道,大家遇到的第一个…

2026/11/2 22:19:31

前端打包编译全流程解析:从入口扫描到产物生成

1. 前端打包编译不是黑箱,是可拆解、可调试、可优化的确定性流程“前端打包和编译”这八个字,对刚入行的开发者像一道雾里看花的门槛——写完React组件,npm run build一敲,几秒后生成一个 dist 文件夹,里面全是带哈希的…

2026/11/2 22:19:31

ZCode深度解析:以代码为中心的智能体运行平台

1. ZCode是什么?先别急着下结论说实话,第一次看到"ZCode 开源了"这几个字的时候,我和大部分人的反应一样——ZCode?这是什么?是编辑器?是框架?还是某个大厂憋了很久的IDE大招&#xf…

2026/11/2 22:19:31

快消企业内训PPT拆解:从索引表到可复用课件的四步法

简介:这份康师傅培训资料以PPT形式梳理快消品企业的经营与管理实践,面向市场营销、产品运营、供应链及人力资源管理方向的学习者与从业者,可用于课堂案例分析、企业内训备课或建立行业认知框架。压缩包内仅含1个PPT文件,大小约1.2…

2026/11/2 22:14:30

2026 AI编程进化论:从代码补全到智能体的落地实践与选型指南

从2023年GitHub Copilot把代码补全带进主流视野,到2026年大家开口闭口都在聊“智能体”,这三年AI编程工具的迭代速度比过去十年加起来都猛。我平时主力写Java和Python,这两年陆陆续续把市面上的AI编程软件几乎试了个遍,从最基础的…

2026/11/2 6:08:01

面向复杂光照与角度的宠物面部识别鲁棒性增强策略

在智慧养宠时代,基于视觉的宠物身份识别技术正逐步从实验室走向家庭应用。然而,与配合度高的人类不同,宠物是典型的“非合作生物识别对象”——它们不会主动配合摄像头调整姿态,更无法控制光照环境。实际应用中,我们常…

2026/11/2 6:39:12

SSM电子书店源码全解析:结构、原理、部署与排错实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/11/2 1:04:04

工业级SPI隔离设计:硬件抗扰与信号完整性实战指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/11/2 1:04:04

PLFM_RADAR:主动探测数据通道,构建低误报的数据感知系统

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/11/2 1:04:04

工业SPI隔离设计:MAX14431与STM32F746硬件抗干扰实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/11/2 6:08:01

面向复杂光照与角度的宠物面部识别鲁棒性增强策略

在智慧养宠时代,基于视觉的宠物身份识别技术正逐步从实验室走向家庭应用。然而,与配合度高的人类不同,宠物是典型的“非合作生物识别对象”——它们不会主动配合摄像头调整姿态,更无法控制光照环境。实际应用中,我们常…

2026/11/2 6:39:12

SSM电子书店源码全解析:结构、原理、部署与排错实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

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

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

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