洛谷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。。

浙公网安备 33010602011771号