题目描述
为了简化问题:天空可以看成一条数轴,在这条数轴上分布着许多颗星星,对于每颗星星都有它的位置Xi 和亮度 Bi。而窗户所能看到的范围是一个给定的参数W,我们看到的星星也包括窗户边缘的星星。现在,要你求出调整窗户位置后能看到星星的亮度之和最大值。
输入格式
第1行:两个空格分隔的整数N和W,分别代表星星的数量和窗户的宽度
接下来N 行,每行两个空格分隔的整数Xi 和 Bi,代表星星的坐标和亮度
输出格式
一个数字,代表能看到星星的最大亮度和
输入输出样列
输入样例1:
6 3 1 2 2 4 3 8 4 4 5 2 10 1输出样例1:
16说明
对于 10% 的数据,W=0(没有边缘)
对于 40% 的数据,W≤1000
对于 100% 的数据,1≤N≤100000,0≤W≤100000,1≤Xi≤100000,1≤Bi≤100
除 W=0 的情况外,W 均为 ≥3 的奇数
【耗时限制】1000ms 【内存限制】128MB
代码
#include<bits/stdc++.h>
using namespace std;
const int N=100005,M=100000;
int x[N],sum[N];
int n,w,i,pos,val;
int main(){
cin>>n>>w;
for(i=1;i<=n;i++){
cin>>pos>>val;
x[pos]+=val;
}
int ans=0;
for(i=1;i<=M;i++)sum[i]=sum[i-1]+x[i];
for(i=w;i<=M;i++)ans=max(ans,sum[i]-sum[i-w]);
cout<<ans;
return 0;
}
你学会了吗?