//cf580B的ac代码,典型的滑动窗口,双指针减小复杂度
/*4 5
75 5
0 100
150 20
75 1
answer 100
*/
#include<stdio.h>
#include<string.h>
#include<algorithm>
#include<iostream>
#include<cmath>
using namespace std;
const int N=1e5;
struct fre
{
long long moneny;
long long factor;
}a[N];
bool cmp(struct fre x,struct fre y)
{
if(x.moneny==y.moneny)
return x.factor>y.factor;
else
return x.moneny<y.moneny;
}
int main(void)
{
int n,k;
scanf("%d %d",&n,&k);
for(int i=0;i<n;i++)
{
scanf("%lld %lld",&a[i].moneny,&a[i].factor);
}
sort(a,a+n,cmp);
long long sum=0,ans=0,num=0,cnt=0;
int i=0,j=0;
ans=a[0].moneny;
for(i=0;i<n;i++)
{
while(j>=i&&a[j].moneny-a[i].moneny<k&&j<n)
{
// printf("pp%d %d\n",j,a[j].moneny);
num+=a[j].factor;
j++;
}
//printf("\n");
sum=max(sum,num);
num-=a[i].factor;
// printf("%d,%d\n",sum,num);
}
sum=max(sum,num);
printf("%lld\n",sum);
return 0;
}
acm算法之双指针滑动窗口
最新推荐文章于 2023-01-13 21:29:57 发布