Advertisement
he_obviously

Untitled

Jul 15th, 2020
93
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.05 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2.  
  3. using namespace std;
  4.  
  5. typedef long long ll;
  6. typedef long double ld;
  7.  
  8. #define all(x) (x).begin(),(x).end()
  9. #define pii pair<int, int>
  10. #define sz(x) (int)x.size()
  11.  
  12. int main() {
  13.  
  14.     ios_base::sync_with_stdio(0);
  15.     cin.tie(0); cout.tie(0);
  16.  
  17.     int n, l;
  18.     cin >> n >> l;
  19.  
  20.     vector<vector<ll>> t(n, vector<ll>(l));
  21.  
  22.     for (int i = 0; i < n; ++i) {
  23.         ll x1, d1, a, c, m;
  24.         cin >> x1 >> d1 >> a >> c >> m;
  25.         t[i][0] = x1;
  26.         for (int j = 1; j < l; ++j) {
  27.             if (j == 1) {
  28.                 t[i][j] = x1 + d1;
  29.             }
  30.             else {
  31.                 d1 = (a * d1 + c) % m;
  32.                 t[i][j] = t[i][j - 1] + d1;
  33.             }
  34.         }
  35.         sort(all(t[i]));
  36.     }
  37.  
  38.     for (int i = 0; i < n; ++i) {
  39.         for (int j = i + 1; j < n; ++j) {
  40.             int left = 0, right = l;
  41.             while (right - left > 1) {
  42.                 int mid = (right + left) / 2;
  43.                 int cnt = mid + 1;
  44.                 cnt += distance(t[j].begin(), lower_bound(all(t[j]), t[i][mid]));
  45.                 if (cnt <= l) {
  46.                     left = mid;
  47.                 }
  48.                 else {
  49.                     right = mid;
  50.                 }
  51.             }
  52.             if (left + 1 + distance(t[j].begin(), lower_bound(all(t[j]), t[i][left])) == l) {
  53.                 cout << t[i][left] << "\n";
  54.                 continue;
  55.             }
  56.             left = 0, right = l;
  57.             while (right - left > 1) {
  58.                 int mid = (right + left) / 2;
  59.                 int cnt = mid + 1;
  60.                 cnt += distance(t[i].begin(), lower_bound(all(t[i]), t[j][mid]));
  61.                 if (cnt <= l) {
  62.                     left = mid;
  63.                 }
  64.                 else {
  65.                     right = mid;
  66.                 }
  67.             }
  68.             if (left + 1 + distance(t[i].begin(), lower_bound(all(t[i]), t[j][left])) == l) {
  69.                 cout << t[j][left] << "\n";
  70.                 continue;
  71.             }
  72.         }
  73.     }
  74.  
  75.     return 0;
  76. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement