扫描线 牛客练习赛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);
}
相关推荐
大圣编程12 小时前
面向对象深度理解
java·开发语言·算法
爱喝水的鱼丶12 小时前
SAP-ABAP:SAP 简单报表输出开发系列(共6篇) 第四篇:SAP 报表异常处理机制:数据校验与消息提示规范落地
开发语言·数据库·学习·算法·sap·abap
代码中介商12 小时前
C++四大设计模式:单例、工厂、观察者、策略
java·c++·设计模式
wabs66612 小时前
关于贪心算法【划分字母区间】的问题总结(C++语法)
算法·贪心算法
2401_8724187812 小时前
什么是多范式编程语言?——以 C++ 为例深入理解编程范式
java·大数据·c++
啦啦啦啦啦zzzz13 小时前
数据结构:二叉树的线索化
数据结构·算法
basketball61613 小时前
设计模式入门:3. 适配器模式详解 C++实现
c++·设计模式·适配器模式
2401_8724187813 小时前
算法入门:并查集(Disjoint Set / Union-Find):连通性问题的利器
算法
luj_176813 小时前
R语言生态优势与学习曲线分析
c语言·开发语言·网络·经验分享·算法
程序大视界13 小时前
【C++ 从基础到项目实战】C++(二):数组、字符串与结构体——组织数据的容器
开发语言·c++·cpp