提交时间:2025-02-07 14:02:27

运行 ID: 36002

#include<bits/stdc++.h> using namespace std; const int N = 2e5 + 5; int n, q, op[N]; long long l, r, a[N], s[N], t[N], x[N]; long long trunc(long long v, long long s, long long t) { long long ret = v - s; if(ret > 0) ret /= t; else ret = (ret + t - 1) / t; return ret; } long long check(long long v) { for(int i = 1; i <= q; ++i) { if(op[i] == 1) { if(x[i] <= v) v = (v + s[i]) * t[i]; } else { if(x[i] >= v) v = trunc(v, s[i], t[i]); } } return v; } int main() { scanf("%d%d%lld%lld", &n, &q, &l, &r); for(int i = n; i; --i) scanf("%lld", a + i); for(int i = 1; i <= q; ++i) scanf("%d%lld%lld%lld", op + i, x + i, s + i, t + i); sort(a + 1, a + n + 1); int l1 = 1, r1 = n; while(l1 <= r1) { int mid = l1 + r1 >> 1; if(check(a[mid]) >= l) r1 = mid - 1; else l1 = mid + 1; } int l2 = 1, r2 = n; while(l2 <= r2) { int mid = l2 + r2 >> 1; if(check(a[mid]) <= r) l2 = mid + 1; else r2 = mid - 1; } printf("%d", l2 - r1 - 1); return 0; }