fork download
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. #define faster ios_base::sync_with_stdio(false); cin.tie(NULL)
  4. #define Bit(mask , i) ((mask >> i) & 1)
  5. #define fi first
  6. #define se second
  7. #define _LOG2(nl) 31 - __builtin_clz(nl)
  8. #define c_bit(nl) __builtin_popcount(nl)
  9. #define li pair<long long , int>
  10. #define iii pair<pair<int , int> , int>
  11. #define db double
  12. #define onBit(mask , i) (mask | (1 << i))
  13. #define offBit(mask , i) (mask & (~(1 << i)))
  14.  
  15. const long long MOD = 1e9 + 7;
  16. const int INF = 8e7;
  17. const int N = 1e6 + 7;
  18. int n , q , m;
  19. int _max[22][N] , max_L[N] , max_R[N] , c[N] , b[N] , a[N];
  20. set<int> cand[N];
  21. vector<int> ans[N];
  22.  
  23. int get(int l , int r){
  24. int k = _LOG2(r - l + 1);
  25. return max(_max[k][l] , _max[k][r - (1 << k) + 1]);
  26. }
  27.  
  28. void nl_R(int l , int r){
  29. for (int i = l ; i < r ; ++i){
  30. int tmp = get(i , r);
  31. int L = i , R = i + tmp - 1;
  32. if (max_R[L] < R) continue;
  33. tmp = get(L , R);
  34. if (R - L + 1 < tmp) continue;
  35. cand[L].insert(R - L + 1);
  36. }
  37. }
  38.  
  39. void nl_L(int r , int l){
  40. for (int i = r ; i > l ; --i){
  41. int tmp = get(l , i);
  42. int R = i , L = i - tmp + 1;
  43. if (max_L[R] > L) continue;
  44. tmp = get(L , R);
  45. if (R - L + 1 < tmp) continue;
  46. cand[L].insert(R - L + 1);
  47. }
  48. }
  49.  
  50. void ktao(){
  51. int p = 0;
  52. for (int i = 1 ; i <= n ; ++i){
  53. p = max(p , c[a[i]]);
  54. max_L[i] = p + 1;
  55. c[a[i]] = i;
  56. }
  57.  
  58. for (int i = 1 ; i <= n ; ++i) c[i] = n + 1;
  59. p = n + 1;
  60. for (int i = n ; i >= 1 ; --i){
  61. p = min(p , c[a[i]]);
  62. max_R[i] = p - 1;
  63. c[a[i]] = i;
  64. }
  65. b[m + 1] = n + 1;
  66. for (int i = 1 ; i <= m ; ++i){
  67. cand[b[i]].insert(1);
  68. nl_R(b[i - 1] + 1 , b[i]);
  69. }
  70. for (int i = m ; i >= 1 ; --i){
  71. nl_L(b[i + 1] - 1 , b[i]);
  72. }
  73. }
  74.  
  75. void inp(){
  76. cin >> n >> q;
  77. m = 0;
  78. for (int i = 1 ; i <= n ; ++i){
  79. cin >> a[i];
  80. _max[0][i] = a[i];
  81. if (a[i] == 1){
  82. ++m;
  83. b[m] = i;
  84. }
  85. }
  86. for (int j = 1 ; j <= 20 ; ++j){
  87. for (int i = 1 ; i + (1 << j) - 1 <= n ; ++i){
  88. _max[j][i] = max(_max[j - 1][i] , _max[j - 1][i + (1 << j - 1)]);
  89. }
  90. }
  91. ktao();
  92. for (int i = 1 ; i <= n ; ++i) if (cand[i].size() > 0){
  93. // cout << i << '\n';
  94. for (int x : cand[i]) ans[i].push_back(x);
  95. // cout << '\n';
  96. }
  97. // cout << '\n';
  98. }
  99.  
  100. void solve(){
  101. while (q--){
  102. int l , x;
  103. cin >> l >> x;
  104. if (cand[l].size() == 0 || *cand[l].rbegin() < x){
  105. cout << -1 << " " << 0 << '\n';
  106. continue;
  107. }
  108. int L = 0 , R = ans[l].size() - 1 , mid , pos;
  109. while (L <= R){
  110. mid = (L + R) >> 1;
  111. if (ans[l][mid] >= x){
  112. pos = mid;
  113. R = mid - 1;
  114. }
  115. else L = mid + 1;
  116. }
  117. cout << ans[l][pos] << " " << ans[l].size() - pos << '\n';
  118. }
  119. }
  120.  
  121. int main(){
  122. // freopen("xhmax.inp" , "r" , stdin);
  123. // freopen("xhmax.out" , "w" , stdout);
  124. faster;
  125. inp();
  126. solve();
  127. return 0;
  128. }
  129.  
Success #stdin #stdout 0.02s 76420KB
stdin
Standard input is empty
stdout
Standard output is empty