扫描线 牛客练习赛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);
}
相关推荐
Hcoco_me几秒前
大模型面试题14:K-means聚类算法全解析(通用场景+深度拓展)
算法·kmeans·聚类
Tim_105 分钟前
【C++入门】02、C++程序初识
开发语言·c++
Jay200211114 分钟前
【机器学习】30 基于内容的过滤算法
人工智能·算法·机器学习
冰西瓜60016 分钟前
分治(二)算法设计与分析 国科大
数据结构·算法
小小晓.24 分钟前
Pinely Round 2 (Div. 1 + Div. 2)
c++·算法
缘三水25 分钟前
【C语言】15.指针(5)
c语言·开发语言·指针·语法
清风拂山岗 明月照大江34 分钟前
简单文件 IO 示例:使用系统调用读写文件
开发语言·c++·算法
Hcoco_me42 分钟前
大模型面试题15:DBSCAN聚类算法:步骤、缺陷及改进方向
算法·数据挖掘·聚类
AI绘画哇哒哒1 小时前
AI 智能体长期记忆系统架构设计与落地实践
人工智能·学习·算法·ai·程序员·产品经理·转行