提交时间:2025-02-07 15:16:47
运行 ID: 36080
#include <bits/stdc++.h> using namespace std; #define ll __int128 #define inf 0x3f3f3f3f3f3f3f3f const int N = 2e5 + 5; int n, Q; ll a[N]; ll l, r; struct ask { ll q, x, s, t; } q[N]; inline ll read() { bool f = 1; ll x = 0; char ch = getchar(); while (ch < '0' || ch > '9') { if (ch == '-') f = !f; ch = getchar(); } while (ch >= '0' && ch <= '9') { x = (x << 1) + (x << 3) + (ch ^ 48); ch = getchar(); } return f ? x : -x; } inline void write(ll x) { if (x < 0) { putchar('-'); x = -x; } if (x > 9) write(x / 10); putchar((x % 10) ^ 48); } inline ll check(ll x) { for (int i = 1; i <= Q; i++) { if (q[i].q == 1 && x >= q[i].x) x = q[i].t * (x + q[i].s); if (q[i].q == 2 && x <= q[i].x) x = (x - q[i].s) / q[i].t; } return x; } int main() { // freopen("arithmetic.in", "r", stdin); // freopen("arithmetic.out", "w", stdout); cin >> n >> Q; l = read(), r = read(); ll L = inf, R = -inf; for (int i = 1; i <= n; i++) { a[i] = read(); L = min(L, a[i]), R = max(R, a[i]); } for (int i = 1; i <= Q; i++) q[i] = {read(), read(), read(), read()}; ll x = L, y = R, res1 = 0, res2 = 0; while (x <= y) { ll mid = (x + y) >> 1; if (check(mid) >= l) { res1 = mid; y = mid - 1; } else x = mid + 1; } x = L, y = R; while (x <= y) { ll mid = (x + y) >> 1; if (check(mid) <= r) { res2 = mid; x = mid + 1; } else y = mid - 1; } // cout << res1 << ' ' << res2 << endl; int cnt = 0; for (int i = 1; i <= n; i++) if (res1 <= a[i] && a[i] <= res2) cnt++; cout << cnt << endl; return 0; }