#include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; typedef long long LL; typedef pair PII; #define MP make_pair #define PB push_back #define FF first #define SS second #define FORN(i, n) for (int i = 0; i < (int)(n); i++) #define FOR1(i, n) for (int i = 1; i <= (int)(n); i++) #define FORD(i, n) for (int i = (int)(n) - 1; i >= 0; i--) #define DEBUG(X) { cout << #X << " = " << (X) << endl; } #define PR0(A,n) { cout << #A << " = "; FORN(_,n) cout << A[_] << ' '; cout << endl; } #define MOD 1000000007 #define INF 2000000000 int GLL(LL& x) { return scanf("%lld", &x); } int GI(int& x) { return scanf("%d", &x); } int n, q; LL a, b; const int MAXN = 100005; LL p[MAXN], c[MAXN]; inline LL mod(LL a) {return ((a%MOD) + MOD) % MOD;} inline LL mul(LL a, LL b) {return (a * b) % MOD;} LL powmod(LL a, LL b) {LL res=1; a %= MOD; for(;b;b>>=1) {if (b&1) res = res*a % MOD; a = a*a % MOD;} return res;} LL modinv(LL a) {return powmod(a, MOD-2);} LL t[2 * MAXN]; inline void calc(int p, int k) { t[p] = mod(t[p << 1] + t[p << 1 | 1]); } void up(int l, int r) { int k = 2; for (l += n, r += n - 1; l > 1; k <<= 1) { l >>= 1, r >>= 1; for (int i = r; i >= l; --i) calc(i, k); } } inline void apply(int p, LL value, int k) { t[p] = value; } void update(int l, int r, LL value) { int l0 = l, r0 = r, k = 1; for (l += n, r += n; l < r; l >>= 1, r >>= 1, k <<= 1) { if (l & 1) apply(l++, value, k); if (r & 1) apply(--r, value, k); } up(l0, l0 + 1); up(r0 - 1, r0); } LL query(int l, int r) { // sum on interval [l, r) LL res = 0; for (l += n, r += n; l < r; l >>= 1, r >>= 1) { if (l & 1) res = mod(res + t[l++]); if (r & 1) res = mod(res + t[--r]); } return res; } int main() { GI(n); GLL(a); GLL(b); GI(q); LL negBAinv = mod(-1 * mul(b, modinv(a))); p[0] = 1; for (int i = 1; i < MAXN; i++) p[i] = mul(p[i-1], negBAinv); memset(t, 0, sizeof t); FORN(i, n) { GLL(c[i]); update(i, i+1, mul(c[i], p[i])); } int typ; while (q--) { GI(typ); if (typ == 1) { int i, x; GI(i); GI(x); c[i] = x; update(i, i+1, mul(c[i], p[i])); } else { int l, r; GI(l); GI(r); LL rem; if (b == 0) { rem = mod(c[l]); } else { rem = query(l, r+1); } // DEBUG(rem); if (rem == 0) { printf("Yes\n"); } else { printf("No\n"); } } } return 0; }