Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- #define int long long
- using namespace std;
- int n;
- const int maxn = 1e5, maxa = 16714589, Level = 20;
- int a[maxn], sparse[Level][maxn];
- vector <int> logs(maxa, 0);
- void build_logs() {
- for (int i = 2; i < maxa; i++) logs[i] = logs[i / 2] + 1;
- }
- signed main() {
- build_logs();
- int m;
- cin >> n >> m >> a[0];
- sparse[0][0] = a[0];
- for (int i = 1; i < n; i++) {
- a[i] = (23 * a[i - 1] + 21563) % 16714589;
- sparse[0][i] = a[i];
- }
- int levels = logs[n - 1] + 1;
- for (int lvl = 1; lvl <= levels; lvl++) {
- int len = (1 << lvl);
- for (int i = 0; i + len <= n; i++) sparse[lvl][i] = min(sparse[lvl - 1][i], sparse[lvl - 1][i + (len >> 1)]);
- }
- int u, v, ans;
- cin >> u >> v;
- for (int i = 1; i < m; i++) {
- u--;
- v--;
- int lvl = logs[max(u, v) - min(u, v) + 1];
- ans = min(sparse[lvl][min(u, v)], sparse[lvl][max(u, v) - (1 << lvl) + 1]);
- u++;
- v++;
- u = ((17 * u + 751 + ans + 2 * i) % n) + 1;
- v = ((13 * v + 593 + ans + 5 * i) % n) + 1;
- }
- u--;
- v--;
- int lvl = logs[max(u, v) - min(u, v) + 1];
- ans = min(sparse[lvl][min(u, v)], sparse[lvl][max(u, v) - (1 << lvl) + 1]);
- u++;
- v++;
- cout << u << " " << v << " " << ans;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement