主席书写完后看了看提交排名,看了看速度最快的代码,瞬间惊呆。我写了200行的代码2s的速度,这个就几行,速度是我10倍,仔细一看才发现不对,他这个代码最差是O(nm)的复杂度,就纯暴力,就加一个优化,就是每一次寻找只寻找k个,但如果k的值一直很大,那实际上还是会退化成O(nm),所以感觉是数据水了。
#include <algorithm>
#include <cstdio>
using namespace std;
const int maxn = 100010;
struct node {
int s, e, p;
inline bool operator<(const node &rhs) const { return p < rhs.p; }
};
node t[maxn];
int main() {
int m, n;
scanf("%d %d", &m, &n);
for (int i = 1; i <= m; i++) scanf("%d %d %d", &t[i].s, &t[i].e, &t[i].p);
sort(t + 1, t + n + 1);
int x, a, b, c, k;
long long ans, pre = 1;
int cnt;
while (n--) {
scanf("%d %d %d %d", &x, &a, &b, &c);
k = (int)(((long long)a * pre + b) % c + 1);
ans = cnt = 0;
for (int i = 1; i <= m; i++)
if (t[i].s <= x && x <= t[i].e) {
ans += t[i].p;
if (++cnt == k)
break;
}
printf("%lld\n", pre = ans);
}
return 0;
}