Advertisement
bibaboba12345

J rucode C-F

Apr 27th, 2022
107
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.42 KB | None | 0 0
  1. #define _CRT_SECURE_NO_WARNINGS
  2. #include <iostream>
  3. #include <random>
  4. #include <cstdlib>
  5. #include <cassert>
  6. #include <algorithm>
  7. #include <cmath>
  8. #include <set>
  9. using namespace std;
  10. mt19937 rnd(12345);
  11.  
  12. const int N = 3e5 + 7;
  13. const unsigned int MOD = 998244353, MOD2 = 2e9+7;
  14. string s;
  15. int n,cnt[26][N];
  16. vector<int> pref_ch[N][26], lst[N][26];
  17.  
  18. void precalc() {
  19. for (char a = 'a'; a <= 'z'; a++) {
  20. for (int i = 0; i < n; i++) {
  21. pref_ch[i][a - 'a'].resize('z' - a + 1);
  22. lst[i][a - 'a'].resize('z' - a + 1);
  23. }
  24. for (char b = a + 1; b <= 'z'; b++) {
  25. int A = a - 'a';
  26. int B = b - a;
  27. char last = a;
  28. if (s[0] == last) {
  29. pref_ch[0][A][B] = 1;
  30. last = b;
  31. lst[0][A][B] = 0;
  32. }
  33. else {
  34. pref_ch[0][A][B] = 0;
  35. lst[0][A][B] = -1;
  36. }
  37. for (int i = 1; i < n; i++) {
  38. pref_ch[i][A][B] += pref_ch[i - 1][A][B];
  39. lst[i][A][B] = -1;
  40. if (s[i] == last) {
  41. pref_ch[i][A][B]++;
  42. lst[i][A][B] = i;
  43. if (last == a) {
  44. last = b;
  45. }else {
  46. last = a;
  47. }
  48. }
  49. }
  50. int r = -1;
  51. for (int i = n - 1; i >= 0; i--) {
  52. if (lst[i][A][B] == -1) {
  53. lst[i][A][B] = r;
  54. }
  55. else {
  56. r = lst[i][A][B];
  57. }
  58. }
  59. }
  60. }
  61. for (char a = 'a'; a <= 'z'; a++) {
  62. int A = a - 'a';
  63. if (s[0] == a) {
  64. cnt[A][0] = 1;
  65. }
  66. else {
  67. cnt[A][0] = 0;
  68. }
  69. for (int i = 1; i < n; i++) {
  70. cnt[A][i] = cnt[A][i - 1];
  71. if (s[i] == a) {
  72. cnt[A][i]++;
  73. }
  74. }
  75. }
  76. }
  77.  
  78. bool check(char a, int l, int r) {
  79. if (r < l) {
  80. return 0;
  81. }
  82. int A = a - 'a';
  83. if (l == 0) {
  84. return cnt[A][r] > 0;
  85. }
  86. return cnt[A][r] - cnt[A][l - 1] > 0;
  87. }
  88.  
  89. int Get(char a, char b, int l, int r) {
  90. int A = a - 'a';
  91. int B = b - a;
  92. if (l == 0) {
  93. return pref_ch[r][A][B];
  94. }
  95. return pref_ch[r][A][B] - pref_ch[l - 1][A][B];
  96. }
  97.  
  98. bool Less(char a, char b, char a1, char b1) {
  99. if (a == a1) {
  100. return b < b1;
  101. }
  102. return a < a1;
  103. }
  104.  
  105. signed main()
  106. {
  107. #ifdef _DEBUG
  108. freopen("input.txt", "r", stdin);
  109. #else
  110. ios::sync_with_stdio(false);
  111. cin.tie(0);
  112. #endif
  113. cin >> s;
  114. n = s.size();
  115. precalc();
  116. int q;
  117. cin >> q;
  118. for (int I = 0; I < q; I++) {
  119. int l, r;
  120. cin >> l >> r;
  121. l--;
  122. r--;
  123. int answ = -1;
  124. char a1 = 'E', b1 = 'R';
  125. for (char a = 'a'; a <= 'z'; a++) {
  126. int A = a - 'a';
  127. for (char b = a + 1; b <= 'z'; b++) {
  128. int B = b - a;
  129. if (a != b && check(a, l, r) != 0) {
  130. int ans = Get(a, b, l, r);
  131. int r1 = lst[l][A][B];
  132. if (r1 != -1 && r1 <= r) {
  133. if (s[r1] == a) { // ab
  134. if (check(b, l, r1 - 1)) { // stalo ba
  135. ans++;
  136. if (ans == answ) {
  137. if (Less(b, a, a1, b1)) {
  138. a1 = b;
  139. b1 = a;
  140. }
  141. }
  142. if (ans > answ) {
  143. a1 = b;
  144. b1 = a;
  145. answ = ans;
  146. }
  147. continue;
  148. }
  149. if (ans == answ) {
  150. if (Less(a, b, a1, b1)) {
  151. a1 = a;
  152. b1 = b;
  153. }
  154. }
  155. if (ans > answ) {
  156. a1 = a;
  157. b1 = b;
  158. answ = ans;
  159. }
  160. }
  161. else { // ba
  162. if (check(a, l, r1 - 1)) { // stalo ab
  163. ans++;
  164. if (ans == answ) {
  165. if (Less(a, b, a1, b1)) {
  166. a1 = a;
  167. b1 = b;
  168. }
  169. }
  170. if (ans > answ) {
  171. a1 = a;
  172. b1 = b;
  173. answ = ans;
  174. }
  175. continue;
  176. }
  177. if (ans == answ) {
  178. if (Less(b, a, a1, b1)) {
  179. a1 = b;
  180. b1 = a;
  181. }
  182. }
  183. if (ans > answ) {
  184. a1 = b;
  185. b1 = a;
  186. answ = ans;
  187. }
  188. }
  189. }
  190. }
  191. }
  192. }
  193. for (char a = 'a'; a <= 'z'; a++) {
  194. if (check(a, l, r)) {
  195. int ans = 1;
  196. char b;
  197. if (a == 'a') {
  198. b = 'b';
  199. }
  200. else {
  201. b = 'a';
  202. }
  203. if (ans == answ) {
  204. if (Less(a, b, a1, b1)) {
  205. a1 = a;
  206. b1 = b;
  207. }
  208. }
  209. if (ans > answ) {
  210. a1 = a;
  211. b1 = b;
  212. answ = ans;
  213. }
  214. }
  215. }
  216. cout << answ << " " << a1 << b1 << "\n";
  217. }
  218. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement