Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <algorithm>
- using namespace std;
- // log(2, 10000) ~ 14
- long long logs[14];
- long long sparseTable[10000][14];
- long long getLog(long long cur_number) {
- if (cur_number == 1) {
- return 0;
- }
- return getLog(cur_number / 2) + 1;
- }
- long long getMinValue(long long left, long long right) {
- long long curLog = logs[right - left];
- return min(sparseTable[left][curLog], sparseTable[right - (1 << curLog)][curLog]);
- }
- int main() {
- int n, m;
- long long answer, u, v;
- cin >> n >> m;
- cin >> sparseTable[0][0] >> u >> v;
- v -= 1;
- u -= 1;
- for (int i = 1; i < n; i++) {
- logs[i] = getLog(i);
- sparseTable[i][0] = (23 * sparseTable[i - 1][0] + 21563) % 16714589;
- }
- for (int j = 1; (1 << j) < n; j++) {
- for (long long i = 0; i + (1 << j) < n; i++) {
- sparseTable[i][j] = min(sparseTable[i][j - 1], sparseTable[i + (1 << (j - 1))][j - 1]);
- }
- }
- for (int i = 1; i < m; i++) {
- answer = (u < v ? getMinValue(u, v) : getMinValue(v, u));
- u = ((17 * (u + 1) + answer + 751 + 2 * i) % n);
- v = ((13 * (v + 1) + answer + 593 + 5 * i) % n);
- }
- cout << u + 1 << " " << v + 1 << " " << (u < v ? getMinValue(u, v) : getMinValue(v, u));
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement