#include <bits/stdc++.h>
using namespace std;
#define euyia ios::sync_with_stdio(0)
#define endl '\n'
#define ar array<int, 2>
#define arr array<int, 3>
int mod = 998244353; //1e9+7;
const int N = 3e5 + 5;
int t, n, m, k;
const int M = 19;
int a[N], b[M], f[N][M];
int main()
{
euyia;
#ifdef DEBUG
freopen("../1.in", "r", stdin);
#endif
// 如果当前有。。那么当前就是最近的能获取y位的数字。。
// 如果没有。。那么就通过自己有的中转点。。中转到最近的有x的地方。。
// 这题jiangly写的好熟练。。
cin >> n >> m;
for (int i = 1; i <= n; ++i)
cin >> a[i];
memset(b, -1, sizeof b);
for (int i = 1; i <= n; ++i)
for (int j = 0; j < 19; j++)
f[i][j] = n + 1;
for (int i = n ; i > 0; --i) {
for (int x = 0; x < 19; ++x) {
if (a[i] >> x & 1) {
f[i][x] = i;
} else {
for (int y = 0; y < 19; ++y)
if ((a[i] >> y & 1) && b[y] != -1)
f[i][x] = std::min(f[i][x], f[b[y]][x]);
}
}
for (int x = 0; x < 19; ++x)
if (a[i] >> x & 1)
b[x] = i;
}
while (m--)
{
int x, y;
cin >> x >> y;
bool ok = 0;
for (int i = 0; i < 19; ++i)
if (f[x][i] <= y && a[y] >> i & 1)
ok = 1;
cout << (ok ? "Shi" : "Fou") << endl;
}
};
136. Single Number | 169. Majority Element |
119. Pascal's Triangle II | 409. Longest Palindrome |
1574A - Regular Bracket Sequences | 1574B - Combinatorics Homework |
1567A - Domino Disaster | 1593A - Elections |
1607A - Linear Keyboard | EQUALCOIN Equal Coins |
XOREQN Xor Equation | MAKEPAL Weird Palindrome Making |
HILLSEQ Hill Sequence | MAXBRIDGE Maximise the bridges |
WLDRPL Wildcard Replacement | 1221. Split a String in Balanced Strings |
1002. Find Common Characters | 1602A - Two Subsequences |
1555A - PizzaForces | 1607B - Odd Grasshopper |
1084A - The Fair Nut and Elevator | 1440B - Sum of Medians |
1032A - Kitchen Utensils | 1501B - Napoleon Cake |
1584B - Coloring Rectangles | 1562B - Scenes From a Memory |
1521A - Nastia and Nearly Good Numbers | 208. Implement Trie |
1605B - Reverse Sort | 1607C - Minimum Extraction |