专栏文章

题解:P11853 [CSP-J2022 山东] 植树节

P11853题解参与者 1已保存评论 0

文章操作

快速查看文章及其快照的属性,并进行相关操作。

当前评论
0 条
当前快照
1 份
快照标识符
@miq0ulhz
此快照首次捕获于
2025/12/03 21:07
3 个月前
此快照最后确认于
2025/12/03 21:07
3 个月前
查看原文

题意

给定了一个全部为 00 的序列,每次对一个区间范围内的数加 11 ,求区间内最大的数

思路

题目要求对一个区间内的数加上 11 ,那么直接套差分就可以了。
不过要注意序列从 00 开始,所以可以将整个序列都向后挪 11就不会在计算原数组时越界了。
并且还要注意题目并没有给出序列的长度,所以还要计算出最大的 bb 来。

code

CPP
#include<bits/stdc++.h>
#define N 1000005
using namespace std;
int n,r;
int a[N],b[N],ans;
int main()
{
	cin>>n;
	for(int i=1;i<=n;i++)
	{
		int x,y;
		scanf("%d%d",&x,&y);
		x++,y++;  //将整个序列整体向后挪1
		b[x]++;b[y+1]--;  //差分
		r=max(r,y); //计算序列的长度
	}
	for(int i=1;i<=r;i++)
	{
		a[i]=a[i-1]+b[i];  //求出原数组
		ans=max(ans,a[i]);  //统计最大值
	}
	cout<<ans<<endl;
	return 0;
}

评论

0 条评论,欢迎与作者交流。

正在加载评论...