小辰的智慧树(差分+前缀和)

登录---专业IT笔试面试备考平台_牛客网

1.考虑总长度之和不能超过m,2考虑限制每棵树高度不能低于ci,如果用二分最短输能截到的高度,还要另外去判断,是否每棵树mid都能严格大于ci ,这样容易超时,换个角度,每棵树我能截到的高度是从a到b,而且最优解是每次只截一个单位长度,因此我想要结果越大就要保持我截到的越高越好,差分和前缀和将所有能截到的位置统计起来,并统计了每个位置有几棵树能截,从最高位置遍历,累加总数不超过m即可

cpp 复制代码
#include<bits/stdc++.h>
using namespace std;
//#define int long long
typedef long long ll;
const int N=2e6+10;
#define endl '\n'
ll sum[N],x[N];
int main(){
	ll n,m;
	cin>>n>>m;
	int a,b;
	for(int i=1;i<=n;i++){
		cin>>a>>b;
		x[b+1]++;//(从b+1的高度开始截,截完后树的高度刚好是b即刚好大于等于ci)
		x[a+1]--;
	}
	ll ans=0;
    sum[0]=x[0];
	for(int i=1;i<=2e6+10;i++){
		sum[i]=sum[i-1]+x[i];
	}
	for(int i=2e6+10;i>=0;i--){
		if(sum[i]){
		     ll xx=min(m,sum[i]);
		     m-=xx;
			ans+=xx*(2*i-1);//(x*(i+i-x)
			if(m<=0)break;
		}
	}
	cout<<ans<<endl;
}
相关推荐
爱和冰阔落2 分钟前
【Python基础】从变量到面向对象:打通 Python 入门核心语法
开发语言·python
凡人叶枫6 分钟前
Effective C++ 条款05:了解 C++ 默默编写并调用哪些函数
java·linux·开发语言·c++·effective c++·编程范式
少司府9 分钟前
C++进阶:AVL树
开发语言·数据结构·c++·二叉树·avl树
珠海西格电力12 分钟前
零碳园区的竞争力体现在哪些方面?
大数据·人工智能·算法·架构·能源
挨代码14 分钟前
UEC++ 数据类型及继承关系
c++·ue
某风吾起15 分钟前
C语言总结
c语言·开发语言
winlife_16 分钟前
全程用 AI 做一款商业级手游 · EP7 表现层与手感:从“能跑“到“摸起来爽“
java·开发语言·人工智能·unity·ai编程·游戏开发·mcp
千纸鹤の脉搏16 分钟前
多线程的初步使用
java·开发语言·学习·多线程
专注VB编程开发20年19 分钟前
阿里通义灵码插件安装失败
开发语言·ide·c#·visual studio
weixin_4462608528 分钟前
Typora 插件开发实战:基于 JavaScript/HTML 构建定制化 Markdown 扩展
开发语言·javascript·html