比赛 26暑假集训模拟赛3 评测结果 AWAAAAAWWWWWAWWAWAWWEEEEE
题目名称 蔬菜 最终得分 36
用户昵称 赵飞羽 运行时间 1.152 s
代码语言 C++ 内存使用 5.08 MiB
提交时间 2026-07-06 10:49:51
显示代码纯文本
#include <bits/stdc++.h>
#define int long long
using namespace std;

const int N = 100010;
int n, m, k, p, ans[N];
struct node{
	int a, s, c, x;
} v[N], s[N];

bool cmp(node x, node y) {
	return x.a > y.a;
}

signed main() {
	ios::sync_with_stdio(0);
	cin.tie(0), cout.tie(0);
	freopen("vegetables.in", "r", stdin);
	freopen("vegetables.out", "w", stdout);
	cin >> n >> m >> k;
	for (int i = 1; i <= n; i++) cin >> v[i].a >> v[i].s >> v[i].c >> v[i].x;
	for (int i = 1; i <= n; i++) v[n+i] = {v[i].a + v[i].s, 0, 1, v[i].x}, v[i].c--;
	n *= 2;
	sort(v+1, v+1+n, cmp);
	for (int i = 1; i <= n; i++) s[i] = {s[i-1].a + v[i].a * v[i].c, 0, s[i-1].c + v[i].c, 0};
	for (int i = 1; i < N; i++) {
		int l = 1, r = n;
		while (l < r) {
			int mid = (l + r) >> 1;
			if (s[mid].c > i * m) r = mid - 1;
			if (s[mid].c <= i * m) l = mid;
			if (l + 1 == r) break;
		}
		if (s[r].c > i * m) r = l;
		ans[i] += s[r].a;
		ans[i] += v[r+1].a * (i * m - s[r].c);
	}
	for (int i = 1; i <= k; i++) {
		cin >> p;
		cout << ans[p] << "\n";
	}
	return 0;
}