专栏文章

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

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

文章操作

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

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

前言

致敬传奇入门组有紫。

正言

首先,要求浇水次数最多的树,每隔志愿者会给第 aibia_i \sim b_i 棵树之间贡献一次浇水次数。
那么很容易发现,这就是一个区间加,并且没有修改操作,那么这就是一个板子的差分。
但是,我们要注意,ai,bia_i,b_i 可以为 00 啊。而差分数组转回正常数组是要用到前缀和,这里会越界。
那我们怎么办呢?
这里给出一种解决方法,那就是将操作的左右端点加 11,让操作从 11 开始,这样就不会越界了,同时,要注意最后求答案的时候要到 106+110^6+1

代码

CPP
#include<bits/stdc++.h>
using namespace std;
const int N=1e6+7;
int n,a[N],b[N],maxv;
void insert(int l,int r,int c){
    b[l]+=c;
    b[r+1]-=c;
}
int main()
{
    cin>>n;
    for(int i=1;i<=n;i++){
        int l,r;
        cin>>l>>r;
        insert(l+1,r+1,1);
    }
    for(int i=1;i<=1000001;i++){
        b[i]+=b[i-1];
        maxv=max(maxv,b[i]);
    }
    cout<<maxv<<endl;
    return 0;
}

评论

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

正在加载评论...