Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
-
- #include <iostream>
- #include <string>
- #include <sstream>
- #include <algorithm>
- #include <vector>
- #include <stdlib.h>
- #include <stdio.h>
- #include <fstream>
- #include <stack>
- #include <map>
- #include <cstring>
- #include <cmath>
- #include <set>
- #include <iterator>
- #include <cmath>
- #include <locale>
- #include <queue>
- #include <deque>
- #include <stack>
- using namespace std;
- const int MOD = 1e6 + 7;
- void VIVOD(vector<vector<int> > vec2, int n, int m)
- {
- for (auto i = 0; i < n; ++i)
- {
- for (auto j = 0; j < m; ++j)
- {
- cout << vec2[i][j] << " ";
- }
- cout << endl;
- }
- }
- int m(char c1, char c2)
- {
- if (c1 == c2)
- return 0;
- return 1;
- }
- int main()
- {
- int a1, k, b, m, n, a2, o = 1, w = 0, q = 0;
- cin >> n >> a1 >> k >> b >> m;
- vector<int> vec(n + 1, 0), vec2(n + 1, 0), ans, a(n + 1), vec3(n + 1, 0);
- vec2[0] = -1;
- vec[0] = -1;
- a[0] = a1;
- for (auto i = 1; i < n; ++i)
- {
- a[i] = (k * a[i - 1] + b) % m;
- }
- for (auto i = 1; i <= n; i++)
- {
- vec[i] = MOD;
- }
- for (auto i = 0; i < n; i++)
- {
- auto j = lower_bound(vec.begin(), vec.end(), a[i]);
- q = j - vec.begin();
- if (vec[q - 1] < a[i] && a[i] < vec[q])
- {
- vec[q] = a[i];
- vec2[q] = i;
- vec3[i] = vec2[q - 1];
- w = max(w, q);
- o = vec2[w];
- }
- }
- while (o != -1)
- {
- ans.push_back(a[o]);
- o = vec3[o];
- }
- for (int i = ans.size() - 1; i >= 0; i--)
- {
- cout << ans[i] << ' ';
- }
- }
- /*
- EXPONENTIAL
- POLYNOMIAL
- 41 83 67 35 71 43
- */
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement