地址Problem - 2014D - Codeforces
官方给出前缀和,本蒟蒻用差分数组给出另解,(二者方法本质没区别,不过差分几乎不会爆int)
自学地址https://blog.youkuaiyun.com/qq_44786250/article/details/100056975
#include<bits/stdc++.h>
using namespace std;
#define ll long long
void solve() {
int n, d, k, l, r;
cin >> n >> d >> k;
vector<int> cover(n +d+2, 0);
for (int i = 1; i <= k; i++) {
cin >> l >> r;
cover[max(l - d + 1, 1)]++;
cover[r + 1]--;
}
for (int i = 1; i <= n; i++) {
cover[i] += cover[i - 1];
}
int maxx = cover[1];
int minn = cover[1];
int time1=1, time2=1;
for (int i = 1; i <= n-d+1; i++) {
if (maxx < cover[i]) {
time1 = i;
}
maxx = max(maxx, cover[i]);
if (minn > cover[i]) {
time2 = i;
}
minn = min(minn, cover[i]);
}
cout<< time1 << " " << time2 << endl;
}
int main() {
std::ios::sync_with_stdio(false);
std::cin.tie(nullptr);
int t;
cin >> t;
while (t--) {
solve();
}
return 0;
}
点个赞