Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #pragma GCC optimize("Ofast")
- #pragma GCC optimize("O3")
- #pragma GCC optimize("unroll-loops")
- #include <bits/stdc++.h>
- //#include <ext/pb_ds/assoc_container.hpp>
- //include <ext/pb_ds/tree_policy.hpp>
- using namespace std;
- //using namespace __gnu_pbds;
- typedef long long ll;
- typedef long double ld;
- #define ordered_set tree<int, null_type, less<int>, rb_tree_tag, tree_order_statistics_node_update>
- #define all(x) (x).begin(),(x).end()
- #define pii pair<int, int>
- #define sz(x) (int)x.size()
- int g[17][100001];
- int main() {
- ios_base::sync_with_stdio(0);
- cin.tie(0); cout.tie(0);
- int n, m, a1;
- cin >> n >> m >> a1;
- int logn = __lg(n);
- vector<int> lg(n + 1, 0);
- lg[n] = logn;
- g[0][0] = a1;
- for (int i = 1; i < n; ++i) {
- lg[i] = __lg(i);
- g[0][i] = (23 * g[0][i - 1] + 21563) % 16714589;
- }
- for (int i = 1; i <= logn; ++i) {
- for (int j = 0; j + (1 << i) <= n; ++j) {
- int x = g[i - 1][j], y = g[i - 1][j + (1 << (i - 1))];
- g[i][j] = (x < y ? x : y);
- }
- }
- int u1, v1, ans;
- cin >> u1 >> v1;
- for (int i = 1; i <= m; ++i) {
- int l = (v1 < u1 ? v1 - 1 : u1 - 1), r = (v1 > u1 ? v1 : u1);
- int log = lg[r - l];
- int x = g[log][l], y = g[log][r - (1 << log)];
- ans = (x < y ? x : y);
- if (i == m) break;
- u1 = ((17 * u1 + 751 + ans + 2 * i) % n) + 1;
- v1 = ((13 * v1 + 593 + ans + 5 * i) % n) + 1;
- }
- cout << u1 << " " << v1 << " " << ans;
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement