Advertisement
Guest User

Untitled

a guest
Feb 28th, 2020
94
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.61 KB | None | 0 0
  1. #include <iostream>
  2. #include <vector>
  3. #include <cmath>
  4.  
  5. using namespace std;
  6.  
  7. vector<int> log_table;
  8. vector<vector<long long>> sparse_table;
  9. vector<long long> arr;
  10.  
  11. long long max(long long a, long long b) {
  12. return a > b ? a : b;
  13. }
  14.  
  15. long long min(long long a, long long b) {
  16. return a < b ? a : b;
  17. }
  18.  
  19. void buildSparseTable() {
  20. log_table.resize(arr.size() + 1);
  21. for (int i = 2; i < log_table.size(); i++) {
  22. log_table[i] = log_table[i / 2] + 1;
  23. }
  24. sparse_table.resize(log_table[log_table.size() - 1] + 1);
  25. sparse_table[0] = arr;
  26. for (int i = 1; i < sparse_table.size(); i++) {
  27. sparse_table[i].resize(arr.size());
  28. }
  29. for (int i = 1; i < sparse_table.size(); i++) {
  30. for (int j = 0; j + (1 << i) <= arr.size(); j++) {
  31. sparse_table[i][j] = min(sparse_table[i - 1][j],
  32. sparse_table[i - 1][j + (1 << (i - 1))]);
  33. }
  34. }
  35. }
  36.  
  37. long rmq(int l, int r) {
  38. l--;
  39. int log = log_table[r - l];
  40. return min(sparse_table[log][l], sparse_table[log][r - (1 << log)]);
  41. }
  42.  
  43. int main() {
  44. int n, m;
  45. cin >> n >> m;
  46. arr.resize(n);
  47. cin >> arr[0];
  48. for (int i = 1; i < arr.size(); i++) {
  49. arr[i] = (23 * arr[i - 1] + 21563) % 16714589;
  50. }
  51. buildSparseTable();
  52. int q1, q2;
  53. cin >> q1 >> q2;
  54. long long prev = rmq(min(q1, q2), max(q1, q2));
  55. q1 = (17 * q1 + 751 + prev + 2) % n + 1;
  56. q2 = ((13 * q2 + 593 + prev + 5) % n) + 1;
  57. for (int i = 2; i <= m; i++) {
  58. long long res = rmq(min(q1, q2), max(q1, q2));
  59. if (i == m) {
  60. cout << q1 << " " << q2 << " " << res;
  61.  
  62. }
  63. q1 = ((17 * q1 + 751 + res + 2 * (i)) % n) + 1;
  64. q2 = ((13 * q2 + 593 + res + 5 * (i)) % n) + 1;
  65. }
  66. return 0;
  67. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement