rt,码如下:
#include <bits/stdc++.h>
using namespace std;
int _, n, a[300010], k[300010], ans[300010], mx[300010];
int l;
int main() {
scanf("%d", &n);
for (int i = 1; i <= n; i++) scanf("%d", &a[i]);
sort(a + 1, a + 1 + n);
for (int i = 1; i <= n; i++) k[i] = i >= a[i] ? mx[i - a[i]] + 1 : 0,
mx[i] = max(mx[i - 1], k[i]), k[i] ? ans[k[i] + n - i] = i : 1;
for (int i = n - 1; i; i--) ans[i] = max(ans[i], ans[i + 1]);
scanf("%d", &n);
while (n--) {
scanf("%d", &l);
printf("%d\n", ans[l]);
}
return 0;
}
评测记录WA on pretest6,思路是给人分段,ki表示以第i个人结尾的段最多能看ki本书,mx类似k但是第i个人不用看,ans表示看i本书最多的满足人数
希望大佬帮忙调,或者证明思路假了