提交时间:2025-02-07 14:42:05

运行 ID: 36030

#include <bits/stdc++.h> #define int long long using namespace std; int n, q, L, R; int a[5005], p[5005]; vector <int> b, c, d, e; signed main() { memset(p, 0x3f, sizeof p); scanf("%lld %lld %lld %lld", &n, &q, &L, &R); for (int i = 1; i <= n; i++) { scanf("%lld", &a[i]); } sort(a + 1, a + n + 1); for (int i = 0; i < q; i++) { int op, x, y, z; scanf("%lld %lld %lld %lld", &op, &x, &y, &z); b.emplace_back(op); c.emplace_back(x); d.emplace_back(y); e.emplace_back(z); } int l = 1, r = n; while (l < r) { int mid = ((l + r) >> 1); int val = a[mid]; for (int i = 0; i < q; i++) { int op = b[i], x = c[i], y = d[i], z = e[i]; if (op == 1) { if (val >= x) val = (val + y) * z; } else { if (val <= x) val = (val - y) / z; } } if (val < L) l = mid + 1; else r = mid; } int xx = l; l = 1, r = n; while (l < r) { int mid = ((l + r + 1) >> 1); int val = a[mid]; for (int i = 0; i < q; i++) { int op = b[i], x = c[i], y = d[i], z = e[i]; if (op == 1) { if (val >= x) val = (val + y) * z; } else { if (val <= x) val = (val - y) / z; } } if (val <= R) l = mid; else r = mid - 1; } printf("%lld", l - xx + 1); return 0; }