Advertisement
Guest User

Untitled

a guest
Feb 28th, 2020
90
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.36 KB | None | 0 0
  1. #include <cstdio>
  2. #include <iostream>
  3. #include <vector>
  4.  
  5. using namespace std;
  6.  
  7. const int log = 25;
  8.  
  9. vector<int>a;
  10. long long opt[3];
  11. vector<vector<long long>>st;
  12. int n;
  13. vector<long long>precalc;
  14.  
  15. void precalcy() {
  16.     precalc[0] = 0;
  17.     precalc[1] = 1;
  18.     for (int i = 2; i <= n; i++) {
  19.         precalc[i] = precalc[i - 1];
  20.          if ((1 << (precalc[i] + 1)) <= i) {
  21.              precalc[i]++;
  22.          }
  23.     }
  24. }
  25.  
  26. void prep() {
  27.     for (int i = 0; i < n; i++) {
  28.         st[i][0] = a[i];
  29.     }
  30.    for (int j = 1; (1 << j) <= n; j++) {
  31.        for (int i = 0; i + (1 << j) <= n; i++) { /// у тебя этот цикл шел до < n, ну зачем ты так с ним ??? :(
  32.            st[i][j] = min(st[i][j - 1], st[i + (1 << (j-1))][j-1]);
  33.        }
  34.    }
  35. }
  36.  
  37. long long func (int l, int r) {
  38.     int j = precalc[r - l + 1];
  39.     return min(st[l][j], st[r - (1 << j) + 1][j]);
  40. }
  41.  
  42. int main() {
  43.     /// убираю файлики, на всякий случай :)
  44.     /// freopen("crypto.in", "r", stdin);
  45.     /// freopen("crypto.out", "w", stdout);
  46.     /// ios::sync_with_stdio(false); - это неправильно, ниже напишу правильно
  47.     ios_base::sync_with_stdio(false);
  48.     cin.tie(); /// - cin.tie() наоборот увеличивает время работы :(
  49.     int m;
  50.     cin >> n >> m;
  51.     a.resize(n);
  52.     cin >> a[0];
  53.     for (int i = 1; i < n; i++) {
  54.         a[i] = (23 * a[i - 1] + 21563) % 16714589;
  55.     }
  56.     precalc.resize(n + 1);
  57.     precalcy();
  58.     st.resize(n + 2); /// возьмём с запасом, на всякий случай.
  59.     for (int i = 0; i <= n; i++) {
  60.         st[i].resize(log);
  61.     }
  62.     prep();
  63.     cin >> opt[0] >> opt[1];
  64.  
  65.    /// opt[2] = func(opt[0] - 1, opt[1] - 1); /// это конечно хорошо,
  66.                             /// но где гарантии, что opt[0] < opt[1] ???
  67.     opt[2] = func(min(opt[0], opt[1]) - 1, max(opt[0], opt[1]) - 1);
  68.     for (int i = 1; i < m; i++) {
  69.         opt[0] = (( 17 * opt[0] + 751 + opt[2] +  2 * (i - 1)) % n) + 1;
  70.         opt[1] = (( 13 * opt[1] + 593 + opt[2] +  5 * (i - 1)) % n) + 1;
  71.         /// opt[2] = func(opt[0] - 1, opt[1] - 1); опят же )
  72.         opt[2] = func(min(opt[0], opt[1]) - 1, max(opt[0], opt[1]) - 1);
  73.     }
  74.     cout << opt[0] << " " << opt[1] << " " << opt[2];
  75.  
  76.     return 0;
  77. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement