Advertisement
dan_sml

Untitled

Jul 11th, 2020
101
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.32 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. #define int long long
  3.  
  4. using namespace std;
  5.  
  6. int n;
  7. const int maxn = 1e5, maxa = 16714589, Level = 20;
  8. int a[maxn], sparse[Level][maxn];
  9. vector <int> logs(maxa, 0);
  10.  
  11. void build_logs() {
  12. for (int i = 2; i < maxa; i++) logs[i] = logs[i / 2] + 1;
  13. }
  14.  
  15. signed main() {
  16. build_logs();
  17. int m;
  18. cin >> n >> m >> a[0];
  19. sparse[0][0] = a[0];
  20. for (int i = 1; i < n; i++) {
  21. a[i] = (23 * a[i - 1] + 21563) % 16714589;
  22. sparse[0][i] = a[i];
  23. }
  24. int levels = logs[n - 1] + 1;
  25. for (int lvl = 1; lvl <= levels; lvl++) {
  26. int len = (1 << lvl);
  27. for (int i = 0; i + len <= n; i++) sparse[lvl][i] = min(sparse[lvl - 1][i], sparse[lvl - 1][i + (len >> 1)]);
  28. }
  29. int u, v, ans;
  30. cin >> u >> v;
  31. for (int i = 1; i < m; i++) {
  32. u--;
  33. v--;
  34. int lvl = logs[max(u, v) - min(u, v) + 1];
  35. ans = min(sparse[lvl][min(u, v)], sparse[lvl][max(u, v) - (1 << lvl) + 1]);
  36. u++;
  37. v++;
  38. u = ((17 * u + 751 + ans + 2 * i) % n) + 1;
  39. v = ((13 * v + 593 + ans + 5 * i) % n) + 1;
  40. }
  41. u--;
  42. v--;
  43. int lvl = logs[max(u, v) - min(u, v) + 1];
  44. ans = min(sparse[lvl][min(u, v)], sparse[lvl][max(u, v) - (1 << lvl) + 1]);
  45. u++;
  46. v++;
  47. cout << u << " " << v << " " << ans;
  48. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement