Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- using namespace std;
- typedef long long ll;
- typedef long double ld;
- #define all(x) (x).begin(),(x).end()
- #define pii pair<int, int>
- #define sz(x) (int)x.size()
- int main() {
- ios_base::sync_with_stdio(0);
- cin.tie(0); cout.tie(0);
- int n, l;
- cin >> n >> l;
- vector<vector<ll>> t(n, vector<ll>(l));
- for (int i = 0; i < n; ++i) {
- ll x1, d1, a, c, m;
- cin >> x1 >> d1 >> a >> c >> m;
- t[i][0] = x1;
- for (int j = 1; j < l; ++j) {
- if (j == 1) {
- t[i][j] = x1 + d1;
- }
- else {
- d1 = (a * d1 + c) % m;
- t[i][j] = t[i][j - 1] + d1;
- }
- }
- sort(all(t[i]));
- }
- for (int i = 0; i < n; ++i) {
- for (int j = i + 1; j < n; ++j) {
- int left = 0, right = l;
- while (right - left > 1) {
- int mid = (right + left) / 2;
- int cnt = mid + 1;
- cnt += distance(t[j].begin(), lower_bound(all(t[j]), t[i][mid]));
- if (cnt <= l) {
- left = mid;
- }
- else {
- right = mid;
- }
- }
- if (left + 1 + distance(t[j].begin(), lower_bound(all(t[j]), t[i][left])) == l) {
- cout << t[i][left] << "\n";
- continue;
- }
- left = 0, right = l;
- while (right - left > 1) {
- int mid = (right + left) / 2;
- int cnt = mid + 1;
- cnt += distance(t[i].begin(), lower_bound(all(t[i]), t[j][mid]));
- if (cnt <= l) {
- left = mid;
- }
- else {
- right = mid;
- }
- }
- if (left + 1 + distance(t[i].begin(), lower_bound(all(t[i]), t[j][left])) == l) {
- cout << t[j][left] << "\n";
- continue;
- }
- }
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement