Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <vector>
- #include <string>
- #include <set>
- #include <queue>
- #define ll long long
- using namespace std;
- const int maxn = 100001;
- const int pr = 1000;
- int m[500001];
- int main()
- {
- ll n, k;
- cin >> n >> k;
- for (int i = 0; i < n; i++)
- cin >> m[i];
- vector <bool> u;
- int l = 0;
- while (l < n - 1)
- {
- bool g = true;
- for (int j = l; j < l + pr - 1 && j<n - 1 && g; j++)
- if (m[j] >= m[j + 1]) g = false;
- u.push_back(g);
- l += pr-1;
- }
- for (int i = 0; i < k; i++)
- {
- int a, b;
- cin >> a >> b;
- a--, b--;
- bool g = true;
- int curpr = 0;
- while (curpr < a)
- curpr += pr-1;
- if (curpr < a) curpr += pr-1;
- if (curpr < b)
- {
- for (int j = a; j < curpr && g; j++)
- if (m[j] >= m[j + 1]) g = false;
- // дошли до ближайшей curpr
- while (curpr + pr-1 <= b && g)
- {
- if (!u[curpr / (pr-1)])
- g = false;
- curpr += pr-1;
- }
- // возможно надо вычесть из curpr pr
- for (int j = curpr; j < b && g; j++)
- if (m[j] >= m[j + 1]) g = false;
- }
- else
- {
- for (int j = a; j < b && g; j++)
- if (m[j] >= m[j + 1]) g = false;
- }
- if (g && a!=b) cout << 'Y';
- else cout << 'N';
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement