P3353 在你窗外闪耀的星星

本文深入探讨了前缀和算法的应用,通过一个具体问题的解决过程,详细讲解了如何使用前缀和算法来处理涉及大量数据查询的问题。文章首先介绍了作者在解决该问题时遇到的难点,包括输入数据的不确定性及数据重叠处理。随后,提出了使用数组记录每个坐标亮度的解决方案,并通过预处理前缀和,实现了高效的数据查询。最后,分享了具体的代码实现。

黄题爆冷了怎么办在线等挺急的啊。。。


题目背景我很认真地看完了。

我哭了,你们呢?

一拳一个泪目怪


这道题一眼看上去就是一个前缀和的。然后我就兴致冲冲地写了一发,交上去10pt,WA声一片。

最初的想法很弱智,我以为他给的星星是按x升序给的。

并且还有一点:星星可能会重合。一个点可能会有多个星星。这些都是我没考虑到的。

所以最好的方法是什么?

直接开一个b数组,记录每一个x坐标的星星亮度。

询问的话就先预处理个前缀和,然后进行\(n\)\(O(1)\)的询问。复杂度\(O(n)\)

代码:

#include<cstdio>
#include<algorithm>

const int maxn = 100005;

int maxx;
int b[maxn];
int n, w;
int main()
{
    scanf("%d%d", &n, &w);
    for(int i = 1; i <= n; i++)
    {
        int xx, bb; scanf("%d%d", &xx, &bb);
        b[xx] += bb;
        maxx = std::max(maxx, xx);
    }
    for(int i = 1; i <= maxx; i++) b[i] += b[i - 1];
    int ans = -19260817;
    for(int i = 1; i + w - 1 <= maxx; i++)
    {
        ans = std::max(ans, b[i + w - 1] - b[i - 1]);
    }
    printf("%d\n", ans);
    return 0;
}

转载于:https://www.cnblogs.com/Garen-Wang/p/9746024.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值