hh的蓝桥杯每日一题

P9426 [蓝桥杯 2023 国 B] 抓娃娃 - 洛谷

这个题目用了二分的方法去优化时间复杂度

首先根据题目可以得到的是--线段中点在区间内才算是被区间覆盖

线段中点在线段内 ⇔ L ≤ (l+r)/2 ≤ R

然后可以转化为2L ≤ l+r ≤ 2R

cpp 复制代码
#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;

const int N = 100010;

int mid2[N];  // 存储每个线段中点的2倍值
int n, m;

// 找到第一个 >= x 的位置
int find_left(int x) {
    int l = 0, r = n - 1;
    while (l <= r) {
        int mid = (l + r) / 2;
        if (mid2[mid] >= x) {
            r = mid - 1;
        } else {
            l = mid + 1;
        }
    }
    return l;  // l是第一个>=x的位置
}

// 找到第一个 > x 的位置
int find_right(int x) {
    int l = 0, r = n - 1;
    while (l <= r) {
        int mid = (l + r) / 2;
        if (mid2[mid] > x) {
            r = mid - 1;
        } else {
            l = mid + 1;
        }
    }
    return l;  // l是第一个>x的位置
}

int main() {
    cin >> n >> m;
    
    for(int i = 0; i < n; i++) {
        int l, r;
        cin >> l >> r;
        mid2[i] = l + r;  // 中点的2倍
    }
    
    // 排序
    sort(mid2, mid2 + n);
    
    // 处理m个查询
    for(int k = 0; k < m; k++) {
        int L, R;
        cin >> L >> R;
        
        // 自己实现二分查找
        int left = find_left(2 * L);    // 第一个 >= 2L 的位置
        int right = find_right(2 * R);  // 第一个 > 2R 的位置
        
        cout << (right - left) << endl;
    }
    
    return 0;
}
相关推荐
晚霞的不甘19 分钟前
Flutter for OpenHarmony 可视化教学:A* 寻路算法的交互式演示
人工智能·算法·flutter·架构·开源·音视频
望舒51322 分钟前
代码随想录day25,回溯算法part4
java·数据结构·算法·leetcode
C++ 老炮儿的技术栈37 分钟前
Qt 编写 TcpClient 程序 详细步骤
c语言·开发语言·数据库·c++·qt·算法
KYGALYX42 分钟前
逻辑回归详解
算法·机器学习·逻辑回归
铉铉这波能秀1 小时前
LeetCode Hot100数据结构背景知识之集合(Set)Python2026新版
数据结构·python·算法·leetcode·哈希算法
踢足球09291 小时前
寒假打卡:2026-2-8
数据结构·算法
IT猿手1 小时前
基于强化学习的多算子差分进化路径规划算法QSMODE的机器人路径规划问题研究,提供MATLAB代码
算法·matlab·机器人
千逐-沐风1 小时前
SMU-ACM2026冬训周报3rd
算法
铉铉这波能秀1 小时前
LeetCode Hot100数据结构背景知识之元组(Tuple)Python2026新版
数据结构·python·算法·leetcode·元组·tuple
晚霞的不甘2 小时前
Flutter for OpenHarmony 实现计算几何:Graham Scan 凸包算法的可视化演示
人工智能·算法·flutter·架构·开源·音视频