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

P11830 [省选联考 2025] 幸运数字 题解

妙妙题。

题目链接。

发现中位数并不好刻画,需要转化。假设对于数字 \(x\),设小于 \(x\) 的数个数为 \(a\),等于 \(x\) 的数的个数为 \(b\),大于 \(x\) 的数的个数为 \(c\)。则 \(x\) 为中位数的充分必要条件\(a+b\ge c\)\(a < b+c\)。这可以推,也可以当成结论记下来。

显然的,对于 \(b\),只要有区间覆盖到 \(x\),就应该加上 \(r_1\),这是最优的。

考虑对应确定的 \(a\),应该怎么做。转化一下条件,就变成了 \(c > a-b\)。因此,\(c \in [a-b+1,a+b]\)

但是显然的, \(c\) 自身的区间也是有上下限的,我们记为 \([L,R]\),因此 \(c \in [max(L,a-b+1),min(R,a+b)]\)。只要这个区间存在, \(x\) 就是合法的。

然后再考虑 \(a\) ,类似的,\(a\) 的取值也存在上下限,记为 \([l,r]\)\(a-b+1\)\(min\) 显然为 \(l - b + 1\)\(a+b\)\(max\) 显然为 \(r+b\)。因此,也就是要 \(c \in [max(L,l-b+1),min(R,r+b)]\)。问题变成了如何高速计算 \(l,r,L,R,b\)

可以考虑离散化+差分的思路。\(b\) 的统计思路是显然的,对于其他的,假设当前处理的区间为 \(l_{i,1},r_{i,1},l_{i,2},r_{i,2}\),则让 \([0,l_{i,2}-1]\)\(L,R\) 进行更新,让 \([r_{i,2}+1,+\infin]\)\(l,r\) 更新。

注意:本题要开 long long。不然做的时候会看到祖宗。

Code

#include<bits/stdc++.h>
using namespace std;
#define IOS ios::sync_with_stdio(false);cin.tie(0),cout.tie(0)
#define File(s) freopen(s".in","r",stdin);freopen(s".out","w",stdout)
#define LL long long
#define fi first
#define se second
#define l1 l$
#define l2 l$$
#define r1 r$
#define r2 r$$
const int M = 4e5 + 10;
const int N = 2e5 + 10;
struct range{LL l1,l2,r1,r2;
};
int n;
int tot;
void solve(){cin >> n;vector< range > a(n);vector< LL > tmp(n);vector< LL > lsh;for(int i=0;i<n;i++){cin >> a[i].l1 >> a[i].r1 >> a[i].l2 >> a[i].r2;lsh.push_back(a[i].l2);lsh.push_back(a[i].r2);lsh.push_back(a[i].r2+1);tmp[i] = a[i].r2;}sort(lsh.begin(),lsh.end());auto lst = unique(lsh.begin(),lsh.end());lsh.erase(lst,lsh.end());int len = lsh.size();for(int i=0;i<n;i++){a[i].l2 = lower_bound(lsh.begin(),lsh.end(),a[i].l2) - lsh.begin()+1;a[i].r2 = lower_bound(lsh.begin(),lsh.end(),a[i].r2) - lsh.begin()+1;}vector<LL> sum(len+1),l(len+1),r(len+1),L(len+1),R(len+1);// b_cnt,l,r,L,Rfor(int i=0;i<n;i++){int x = lower_bound(lsh.begin(),lsh.end(),tmp[i]+1) - lsh.begin()+1;sum[a[i].l2] += a[i].r1;sum[x] -= a[i].r1;L[0] += a[i].l1;L[a[i].l2] -= a[i].l1;R[0] += a[i].r1;R[a[i].l2] -= a[i].r1;l[x] += a[i].l1;r[x] += a[i].r1;}for(int i=1;i<=len;i++){sum[i] += sum[i-1];l[i] += l[i-1];r[i] += r[i-1];L[i] += L[i-1];R[i] += R[i-1];}lsh.push_back(len+1);LL ans = 0;for(int i=1;i<=len;i++){// cout << l[i] << " " << r[i] << " " << L[i] << " " << R[i] << " " << sum[i] << "\n";if(sum[i] && max(l[i]-sum[i]+1,L[i]) <= min(r[i]+sum[i],R[i])){ans += lsh[i] - lsh[i-1];}}cout << ans << "\n";return ;
}
int main()
{IOS;int c,T;cin >> c >> T;while(T -- ) solve();return 0;
}
http://www.jsqmd.com/news/439662/

相关文章:

  • 微软警告OAuth重定向钓鱼攻击利用邮件传播恶意软件
  • DP动态规划总结
  • 从指令驱动到结果交付:深度解析实在Agent在企业级自动化中的架构演进与效率革命
  • python和pycharm安装的安装
  • [AI智能体与提效-157] - Python是解释性语言,还是编译型语言,与同类型语言的比较
  • 24年匠心深耕,污水处理设备优选乾坤环保:实力铸就信赖,品质领跑行业 - 品牌推荐大师1
  • 2026年3月集装箱登车桥厂家推荐,专业制造与品牌保障口碑之选 - 品牌鉴赏师
  • 2026全自动商用咖啡机哪家好?选购指南与品牌推荐 - 品牌2026
  • Agile.Zhou
  • Tita 小技巧:表格分组功能,解锁 3 大职场场景高效管理
  • Flutter 三方库 mdc_web 的鸿蒙化适配指南 - 掌控 Material Design Web 组件语义、交互标准实战、鸿蒙级精密 UI 专家
  • 2026年3月徐州装修/徐州装修设计/徐州装饰装修/徐州装修装饰公司哪家好 - 2026年企业推荐榜
  • 反渗透和一拖3恒压供水,程序注释完善,在山东某猪场和鸡场运行正常。 可以手机app远程监控,p...
  • hon 的王牌数据结构之一,掌握它们,你的代码会更简洁更高效。 参考文章: Python 使用 Dict 和 Set | 简单一点学 ...
  • 隐私保护手机推荐排行榜:这五款守护数字生活
  • 『NAS』在群晖部署私有化简历制作-OpenResume
  • Flutter 三方库 universal_disk_space 的鸿蒙化适配指南 - 掌控磁盘空间精密监控、存储水位预警实战、鸿蒙级精密持久化专家
  • Linux VIRT-RES-SHR内存概念理解
  • [SDR] 基于两个 hackrf 实现连续波测速雷达
  • 清洁度检测分析系统厂家哪家强?苏州西恩士工业品质领先 - 工业设备研究社
  • 别再瞎找了!专科生专属降AIGC工具 —— 千笔·降AI率助手
  • 更复杂的代码,为何跑得快了倍?一次Draw Call优化引发的思考
  • FastAPI流式输出实战与避坑指南:让AI像人一样“边想边说”
  • Node.js 面试题
  • 强烈安利 9个降AIGC软件:自考降AI率必备工具深度测评
  • Vite 课程
  • 全屋定制如何省心?看看这些用户推荐的工作室,全屋定制/原木定制,全屋定制企业推荐 - 品牌推荐师
  • 2026清洁度检测分析设备多少钱一台?苏州西恩士工业报价及参数详解 - 工业设备研究社
  • TinyVue skills使用指南
  • 三亚靠谱领队阿鑫:官方数据背书的纯玩安心之选 - 速递信息