例题:
代码如下:
cpp
#include <bits/stdc++.h>
using namespace std;
#define endl "\n"
#define int long long
void solve() {
int n,k;
cin>>n>>k;
vector<pair<int,int>> a;
for (int i=0;i<n;i++) {
//每个合法L的取值范围是[l-k,r],所以直接将生成2个事件
//(l-k,+1)和(r+1,-1)
//那么原问题变为:找一个点 L,被最多的区间 [lᵢ−k, rᵢ] 覆盖 → 覆盖数最大值就是答案。
int l,r;
cin>>l>>r;
int L=l-k;
int R=r+1;
a.push_back({L,1});
a.push_back({R,-1});
}
sort(a.begin(),a.end());
int ans=0;//记录最大答案
int now=0;//记录当前点的累计覆盖数
for (auto it=a.begin();it!=a.end();it++) {
now+=it->second;
ans=max(ans,now);
}
cout<<ans<<endl;
}
signed main()
{
ios::sync_with_stdio(false);
cin.tie(nullptr);
int T=1;
//cin >> T;
while (T--)
solve();
return 0;
}