扫描线 牛客练习赛124_PLUS_C

题目链接

cpp 复制代码
#include<bits/stdc++.h>
#define ll long long
using namespace std;
const int N=1e6+10;
int n,k,m,t[N],l[N],r[N];
vector<int> g[N];
priority_queue<int,vector<int>,greater<int>> q;
signed main(){
	scanf("%d%d%d",&n,&m,&k);
	for(int i=1;i<=n;i++){
		scanf("%d%d",&l[i],&r[i]),t[i]=r[i];
	}
	sort(t+1,t+n+1);//按右端点排序
	for(int i=1;i<=n;i++){
		int x=lower_bound(t+1,t+n+1,r[i])-t;//找到第一个大于等于r[i]的下标
		g[x].push_back(l[i]); //>=r[i]包含的左端点
	}
	ll ans=0;t[n+1]=m+1;
	for(int i=1;i<=n;i++){
		for(int x:g[i])q.push(x);//q相当于小根堆,左端点单调不降
		while(q.size()>k)q.pop();
        //q.top()左边区间的贡献
        //t[i]~t[i+1]区间的贡献,不包括t[i+1]点
		if(q.size()==k)ans+=1ll*(t[i+1]-t[i])*(q.top());
	}
	printf("%lld\n",ans);
}
相关推荐
青瓦梦滋16 分钟前
协议定制/序列化-反序列化(Linux视角)
linux·服务器·网络·c++
珠海西格电力3 小时前
云边端协同架构:零碳园区管理系统的技术底座
大数据·运维·人工智能·算法·架构·能源
山登绝顶我为峰 3(^v^)34 小时前
C/C++ 交叉编译方法
java·c语言·c++
还有多久拿退休金4 小时前
让飞书知识库跟着 commit 自己长:一套自动化知识库的真实实现
前端·算法·架构
KaMeidebaby6 小时前
卡梅德生物技术快报|小 RNA 适配体合成 + 多方法亲和力表征全流程标准化操作手册
前端·网络·数据库·人工智能·算法
是Dream呀6 小时前
基于深度学习的人类行为识别算法研究
人工智能·深度学习·算法
happyprince7 小时前
03_NVIDIA_ModelOpt-量化算法深入
人工智能·深度学习·算法
大鱼>7 小时前
AI+货物追踪:智能快递柜追踪系统
人工智能·深度学习·算法·机器学习
LONGZETECH7 小时前
新能源汽车动力电池检测仿真教学系统:C/S 分层架构与数字化实训落地全解析
大数据·c语言·开发语言·人工智能·架构·系统架构·汽车
researcher-Jiang7 小时前
算法训练:堆 & 可并堆
算法