Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- using namespace std;
- struct block {
- int mx = -1;
- vector <int> nums;
- };
- int s = 320;
- vector<block> dc(320);
- int get_max(int l, int r) {
- int ans = -1;
- while (l < r) {
- if (l % s || l + s - 1 >= r) {
- ans = max(ans, dc[l / s].nums[l % s]);
- l++;
- } else {
- ans = max(ans, dc[l / s].mx);
- l += s;
- }
- }
- return ans;
- }
- int main() {
- int n;
- cin >> n;
- vector <int> v(n);
- for (int i = 0; i < n; i++) cin >> v[i];
- for (int i = 0; i < n; i++) {
- dc[i / s].nums.push_back(v[i]);
- dc[i / s].mx = max(dc[i / s].mx, v[i]);
- }
- int k;
- cin >> k;
- for (int i = 0; i < k; i++) {
- int l, r;
- cin >> l >> r;
- l--;
- cout << get_max(l, r) << " ";
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement