洛谷P3353 【在你窗外闪耀的星星】题解

没错,这是一眼就能看出是打前缀和的水题。但是我高兴的打完后却wa了。(10分)百思不得其解。后来才发现会有重点!!如果有好几个星星在同一个点上那么这个点的亮度是它们的亮度和。然后一遍跑过去就行了。sum[i]表示前i个点的星星亮度和。f[i]表示第i个点的亮度。

#include<bits/stdc++.h>
using namespace std;
int f[1000005],sum[1000005],n,m,x,y,ans,maxn;
int read()
{
    int x=0;char c;bool f;
    f=false;
    c=getchar();
    if (c=='-') f=true;
    while (c<'0'||c>'9') c=getchar();
    while (c>='0'&&c<='9') x=x*10+c-'0',c=getchar();
    if (f==true) x=x*-1;
    return x;
}
struct mmp
{
    int x,y;
}a[100005];
bool cmp(mmp x,mmp y)
{
    return x.x<y.x;
}
int main()
{
    n=read();m=read();
    maxn=1;
    /*
    for (int i=1;i<=n;i++)
    {a[i].x=read();a[i].y=read();}
    sort(1+a,1+a+n,cmp);
    for (int i=1;i<=n;i++)*/
    for (int i=1;i<=n;i++)
    {
        x=read();y=read();
        f[x]+=y;
        maxn=max(maxn,x);
    }
    for (int i=1;i<=maxn;i++)
    sum[i]=sum[i-1]+f[i];
    ans=-1;
    for (int i=1;i<=maxn;i++)
    {
        ans=max(ans,sum[i]-sum[i-m]);
    }
    printf("%d",ans);
    return 0;
}

 不用管a数组。。。刚开始以为要sort。。

posted @ 2019-02-24 15:04  xzjds  阅读(264)  评论(0编辑  收藏  举报