扫描线 牛客练习赛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);
}
相关推荐
CSDN_RTKLIB11 小时前
【std::vector】size、capacity小结
c++·stl
AI科技星11 小时前
能量绝对性与几何本源:统一场论能量方程的第一性原理推导、验证与范式革命
服务器·人工智能·科技·线性代数·算法·机器学习·生活
Coder_Boy_11 小时前
基于SpringAI的在线考试系统-数据库表设计
java·数据库·算法
散峰而望11 小时前
【算法竞赛】链表和 list
数据结构·c++·算法·链表·list·哈希算法·推荐算法
Legendary_00811 小时前
从DC接口改成Type-C:LDR6328芯片助力传统设备升级快充体验
c语言·开发语言
至为芯11 小时前
IP5385至为芯支持C口双向快充的30W到100W移动电源方案芯片
c语言·开发语言
爱编程的小吴11 小时前
【力扣练习题】55. 跳跃游戏
算法·leetcode
春日见11 小时前
控制算法:PID算法
linux·运维·服务器·人工智能·驱动开发·算法·机器人
Maỿbe12 小时前
常见的垃圾收集算法
java·jvm·算法
郝学胜-神的一滴12 小时前
Qt OpenGL 生成Mipmap技术详解
开发语言·c++·qt·系统架构·游戏引擎·图形渲染·unreal engine