Advertisement
skimono

SPT

Oct 29th, 2021
210
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.98 KB | None | 0 0
  1. #pragma GCC optimize("Ofast")
  2. #pragma GCC target("avx2")
  3. #define _CRT_SECURE_NO_WARNINGS
  4. #include <iostream>
  5. #include <vector>
  6. #include <algorithm>
  7. #include <cmath>
  8. #include <stack>
  9. #include <iomanip>
  10. #include <fstream>
  11. #include <string>
  12. #include <set>
  13. #include <deque>
  14. #include <queue>
  15. #include <map>
  16. #include <bitset>
  17. #include <random>
  18.  
  19. using namespace std;
  20.  
  21. typedef long long ll;
  22. typedef unsigned long long ull;
  23. typedef long double ld;
  24. typedef string str;
  25. #define endl "\n"
  26. #define sqrt sqrtl
  27.  
  28. #define all(a) a.begin(), a.end();
  29. //#define pow bin_pow
  30.  
  31. const ll inf = 1e9 + 13;
  32. long double eps = 1e-6;
  33. const ll maxsz = 1e6 + 5;
  34. ll mod = 16714589;
  35.  
  36. signed main() {
  37. #ifdef _DEBUG
  38.     freopen("input.txt", "r", stdin);
  39.     freopen("output.txt", "w", stdout);
  40. #endif
  41.     ios_base::sync_with_stdio(0);
  42.     cin.tie(NULL);
  43.     cout.tie(NULL);
  44.     ll n, m, i, j;
  45.     cin >> n >> m;
  46.     n++;
  47.     vector<ll> a(n);
  48.     cin >> a[1];
  49.     for (i = 1; i < n - 1; i++) {
  50.         a[i + 1] = (23 * a[i] + 21563) % mod;
  51.     }
  52.     vector<ll> logs(n + 1);
  53.     logs[1] = 0;
  54.     for (ll i = 2; i <= n; i++) {
  55.         logs[i] = logs[i / 2] + 1;
  56.     }
  57.     vector<vector<ll>> spt(logs[n] + 1, vector<ll>(n));
  58.     for (ll i = 0; i < n; i++) {
  59.         spt[0][i] = a[i];
  60.     }
  61.     for (ll lv = 1; (1 << lv) <= n; lv++) {
  62.         for (ll i = 0; i + (1 << lv) <= n; i++) {
  63.             spt[lv][i] = min(spt[lv - 1][i], spt[lv - 1][i + (1 << (lv - 1))]);
  64.         }
  65.     }
  66.     ll u, v, ul, vl;
  67.     cin >> u >> v;
  68.     ll ans;
  69.     ll lv = logs[abs(u - v) + 1];
  70.     ans = min(spt[lv][min(u, v)], spt[lv][max(u, v) - (1 << lv) + 1]);
  71.     for (i = 2; i <= m; i++) {
  72.         ul = u;
  73.         vl = v;
  74.         u = ((17 * ul + 751 + ans + 2 * (i - 1)) % (n - 1)) + 1;
  75.         v = ((13 * vl + 593 + ans + 5 * (i - 1)) % (n - 1)) + 1;
  76.         lv = logs[abs(u - v) + 1];
  77.         ans = min(spt[lv][min(u, v)], spt[lv][max(u, v) - (1 << lv) + 1]);
  78.     }
  79.     cout << u << " " << v << " " << ans << endl;
  80.     return 0;
  81. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement