Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <math.h>
- #include <algorithm>
- #include <vector>
- using namespace std;
- struct st {
- long long n;
- vector < vector <long long> > t;
- vector <long long> a;
- vector <long long> b;
- st(){};
- st (vector<long long> q) {
- n = q.size();
- t.assign(n, vector<long long>(20));
- a.assign(n + 1, -1);
- b.assign(n + 1, -1);
- long long d = 0, d2 = 1;
- while (d2 <= n)
- {
- b[d2] = d2;
- a[d2] = d;
- d2 *= 2;
- d++;
- }
- for (int i = 1; i <= n; i++)
- {
- if (a[i] != -1)
- {
- d = a[i];
- d2 = b[i];
- }
- else
- {
- a[i] = d;
- b[i] = d2;
- }
- }
- for (int i = 0; i < n; i++)
- {
- t[i][0] = q[i];
- }
- long long p = 1;
- for (int j = 1; j < 20; ++j)
- {
- p = p * 2;
- for (int i = 0; i + p - 1 < n; ++i)
- {
- t[i][j] = min (t[i][j - 1], t[i + p / 2][j - 1]);
- }
- }
- }
- long long mi (long long l, long long r){
- if (l > r) swap(l, r);
- int j = a[r - l + 1];
- int k = b[r - l + 1];
- //cout << l << ' ' << r << ' ' << j << ' ' << k << endl;
- return (min(t[l][j], t[r - k + 1][j]));
- }
- };
- int main()
- {
- /*
- freopen("sparse.in", "r", stdin);
- freopen("sparse.out", "w", stdout);
- */
- long long n, m, i, x, y, p, x1, y1;
- cin >> n >> m;
- vector <long long> a (n, 0);
- for (i = 1; i < n; i++)
- {
- a[i] = (23 * a[i - 1] + 21563) % 16714589;
- }
- st t(a);
- cin >> x >> y;
- for (i = 1; i < m; i++)
- {
- x1 = ((17 * x + 751 + t.mi(x - 1, y - 1) + 2 * i) % n) + 1;
- y1 = ((13 * y + 593 + t.mi(x - 1, y - 1) + 5 * i) % n) + 1;
- x = x1;
- y = y1;
- }
- cout << x << " " << y << " " << t.mi(x - 1, y - 1);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement