dan_sml

Untitled

Jul 11th, 2020
107
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 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. }
Add Comment
Please, Sign In to add comment