Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #pragma GCC optimize("Ofast")
- #pragma GCC optimize("O3")
- #pragma GCC optimize("unroll-loops")
- #include <bits/stdc++.h>
- using namespace std;
- #define int long long
- #define ld long double
- #define pb push_back
- #define f first
- #define s second
- const int N = 2e5 + 5;
- int n, q, x, a[N], pref[N], suff[N];
- bool ans[N];
- vector <pair <int, int>> vec[N];
- void rec (int l, int r) {
- if (l >= r) {
- return;
- }
- int m = (l + r) / 2;
- pref[m + 1] = a[m + 1] % x;
- for (int i = m + 2; i <= r; ++i) {
- pref[i] = pref[i - 1] * a[i] % x;
- }
- suff[m] = a[m];
- for (int i = m - 1; i >= l; --i) {
- suff[i] = suff[i + 1] * a[i] % x;
- }
- for (int i = l; i <= m; ++i) {
- while (!vec[i].empty()) {
- auto [R, id] = vec[i].back();
- if (m + 1 <= R) {
- if (suff[i] * pref[R] % x) {
- ans[id] = 0;
- } else {
- ans[id] = 1;
- }
- vec[i].pop_back();
- } else {
- break;
- }
- }
- }
- rec(l, m);
- rec(m + 1, r);
- }
- void solve () {
- cin >> n >> x;
- for (int i = 1; i <= n; ++i) {
- cin >> a[i];
- }
- cin >> q;
- for (int i = 1; i <= q; ++i) {
- int l, r;
- cin >> l >> r;
- if (l == r) {
- if (a[l] % x) {
- ans[i] = 0;
- } else {
- ans[i] = 1;
- }
- } else {
- vec[l].pb({r, i});
- }
- }
- for (int i = 1; i <= n; ++i) {
- sort(vec[i].begin(), vec[i].end());
- }
- rec(1, n);
- for (int i = 1; i <= q; ++i) {
- if (ans[i]) {
- cout << "Yes\n";
- } else {
- cout << "No\n";
- }
- }
- for (int i = 1; i <= n; ++i) {
- vec[i].clear();
- }
- }
- signed main() {
- ios_base::sync_with_stdio(0);
- cin.tie(0);
- cout.tie(0);
- int t = 1;
- cin >> t;
- while (t--) {
- solve();
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment