| 记录编号 |
617715 |
评测结果 |
AAAAAAAAAAAA |
| 题目名称 |
247.售票系统 |
最终得分 |
100 |
| 用户昵称 |
ChenBp |
是否通过 |
通过 |
| 代码语言 |
C++ |
运行时间 |
0.699 s |
| 提交时间 |
2026-07-23 10:02:36 |
内存使用 |
3.96 MiB |
显示代码纯文本
#include <iostream>
using namespace std;
const int N = 6e4 + 4, tN = 4 * N;
int tr[tN], lz[tN];
#define mid ((l + r) / 2)
#define lc (u * 2)
#define rc (u * 2 + 1)
void lazy(int u, int l, int r, int v) {
tr[u] += v;
lz[u] += v;
}
void pd(int u, int l, int r) {
if (lz[u]) {
lazy(lc, l, mid, lz[u]);
lazy(rc, mid + 1, r, lz[u]);
}
lz[u] = 0;
}
void update(int u, int l, int r, int xl, int xr, int v) {
if (xl <= l && r <= xr) {
lazy(u, l, r, v);
return;
}
pd(u, l, r);
if (xl <= mid) update(lc, l, mid, xl, xr, v);
if (mid + 1 <= xr) update(rc, mid + 1, r, xl, xr, v);
tr[u] = min(tr[lc], tr[rc]);
}
int query(int u, int l, int r, int xl, int xr) {
if (xl <= l && r <= xr) return tr[u];
pd(u, l, r);
int res = 1e9;
if (xl <= mid) res = min(res, query(lc, l, mid, xl, xr));
if (mid + 1 <= xr) res = min(res, query(rc, mid + 1, r, xl, xr));
return res;
}
int main() {
int c, s, r;
cin >> c >> s >> r;
update(1, 1, c - 1, 1, c - 1, s);
while (r--) {
int o, d, n;
cin >> o >> d >> n;
if (query(1, 1, c - 1, o, d - 1) >= n) {
cout << "YES\n";
update(1, 1, c - 1, o, d - 1, -n);
} else {
cout << "NO\n";
}
}
return 0;
}