扫描线 牛客练习赛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);
}
相关推荐
果果燕2 分钟前
C++ 学习笔记(二):类与对象—— 构造函数与析构函数
开发语言·c++
江畔柳前堤4 分钟前
Function Calling 与 Tool Calling:从认知到工程的全景深度解析
开发语言·网络·人工智能·深度学习·算法·机器学习·php
Navigator_Z5 分钟前
LeetCode //C - 1192. Critical Connections in a Network
c语言·算法·leetcode
老洋葱Mr_Onion20 分钟前
【C++】信息学奥赛CSP通关之路——CSP-J/S第一轮原创全真模拟试卷集(2026)卷四全卷解析
开发语言·c++
zander25830 分钟前
LeetCode 739:每日温度——为什么单调栈要持续弹出
开发语言·python·算法
2601_9557598832 分钟前
如何降低 Claude API 批量生产返工率
大数据·人工智能·算法
rannn_11141 分钟前
【力扣hot100】链表专题下|138、148、23、146
java·算法·leetcode·链表·开发
ly76891 小时前
分布式一致性算法详解:从 2PC、3PC 到 Paxos、Raft、ZAB
分布式·算法
(initial)1 小时前
C-05. Kernel Fusion 代价边界:少写回 vs 寄存器压力与 occupancy
c语言·开发语言·cuda
阿维的博客日记1 小时前
保姆级教程-BBPE分词算法
算法·bbpe