Advertisement
supremeXD

Untitled

Apr 14th, 2024
11
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 0.98 KB | None | 0 0
  1. #include <iostream>
  2. #include <algorithm>
  3. #include <vector>
  4. using namespace std;
  5.  
  6. const int SIZE = 100000;
  7. const int LOG = 17;
  8. pair<int, int> sparse[LOG][SIZE];
  9. int logs[SIZE + 1];
  10.  
  11. pair<int, int> askmax(int l, int r) {
  12. int level = logs[r - l + 1];
  13. return max(sparse[level][l], sparse[level][r - (1 << level) + 1]);
  14. }
  15.  
  16. int main() {
  17. ios_base::sync_with_stdio(false);
  18. cin.tie(0);
  19. cout.tie(0);
  20. int n;
  21. cin >> n;
  22. vector<int>a(n);
  23. logs[0] = logs[1] = 0;
  24. for (int i = 2; i <= n; i++) {
  25. logs[i] = logs[i / 2] + 1;
  26. }
  27. for (int i = 0; i < n; i++) {
  28. cin >> a[i];
  29. sparse[0][i] = { a[i], i };
  30. }
  31. for (int level = 1; (1 << level) <= n; level++) {
  32. for (int i = 0; i + (1 << level) <= n; i++) {
  33. sparse[level][i] = max(sparse[level - 1][i], sparse[level - 1][i + (1 << (level - 1))]);
  34. }
  35. }
  36. int m, l, r;
  37. cin >> m;
  38. for (int i = 0; i < m; i++) {
  39. cin >> l >> r;
  40. cout << askmax(l - 1, r - 1).first << " " << askmax(l - 1, r - 1).second + 1 << endl;
  41. }
  42. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement