Advertisement
Guest User

Untitled

a guest
Mar 20th, 2019
66
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.32 KB | None | 0 0
  1. #include <iostream>
  2. #include <algorithm>
  3. using namespace std;
  4.  
  5. // log(2, 10000) ~ 14
  6. long long logs[14];
  7. long long sparseTable[10000][14];
  8.  
  9. long long getLog(long long cur_number) {
  10. if (cur_number == 1) {
  11. return 0;
  12. }
  13. return getLog(cur_number / 2) + 1;
  14. }
  15.  
  16. long long getMinValue(long long left, long long right) {
  17. long long curLog = logs[right - left];
  18. return min(sparseTable[left][curLog], sparseTable[right - (1 << curLog)][curLog]);
  19. }
  20.  
  21. int main() {
  22.  
  23. int n, m;
  24. long long answer, u, v;
  25.  
  26. cin >> n >> m;
  27. cin >> sparseTable[0][0] >> u >> v;
  28.  
  29. v -= 1;
  30. u -= 1;
  31.  
  32. for (int i = 1; i < n; i++) {
  33. logs[i] = getLog(i);
  34. sparseTable[i][0] = (23 * sparseTable[i - 1][0] + 21563) % 16714589;
  35. }
  36.  
  37. for (int j = 1; (1 << j) < n; j++) {
  38. for (long long i = 0; i + (1 << j) < n; i++) {
  39. sparseTable[i][j] = min(sparseTable[i][j - 1], sparseTable[i + (1 << (j - 1))][j - 1]);
  40. }
  41. }
  42.  
  43. for (int i = 1; i < m; i++) {
  44. answer = (u < v ? getMinValue(u, v) : getMinValue(v, u));
  45. u = ((17 * (u + 1) + answer + 751 + 2 * i) % n);
  46. v = ((13 * (v + 1) + answer + 593 + 5 * i) % n);
  47. }
  48.  
  49. cout << u + 1 << " " << v + 1 << " " << (u < v ? getMinValue(u, v) : getMinValue(v, u));
  50.  
  51. return 0;
  52. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement