DSA
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

62 lines
1.2 KiB

  1. #include <iostream>
  2. #include <cstdlib>
  3. #include <cstdio>
  4. #include <algorithm>
  5. #include <set>
  6. #include <map>
  7. #include <vector>
  8. #define pb push_back
  9. #define ub upper_bound
  10. #define lb lower_bound
  11. #define sc(x) scanf("%I64d",&x)
  12. #define pr(x) printf("%I64d\n",x)
  13. #define int long long
  14. using namespace std ;
  15. const int MAXN = 1e9+1 ;
  16. const int N = 1e6+1 ;
  17. int n , m , k , x , y , z , gt ;
  18. int a[N] , d[30][N] , p[N] ;
  19. void build ()
  20. {
  21. for (int i = 1 ; i <= n ; ++i )
  22. d[0][i] = a[i] ;
  23. for (int i = 2 ; i < N ; ++i )
  24. p[i] = p[i / 2] + 1;
  25. for (int i = 1 ; i <= p[n] ; ++i )
  26. for (int j = 1 ; j <= n - (1 << p[i]) + 1 ; ++j )
  27. d[i][j] = min (d[i - 1][j] , d[i - 1][j + (1 << (i - 1))]) ;
  28. }
  29. int get (int l , int r)
  30. {
  31. int rr = max(r,l) ;
  32. int ll = min(r,l) ;
  33. int m = rr-ll + 1 ;
  34. m = p[m] ;
  35. return min (d[m][ll] , d[m][rr - (1 << m) + 1]) ;
  36. }
  37. main()
  38. {
  39. cin >> n >> m >> a[1] ;
  40. for ( int i = 2 ; i <= n ; ++i )
  41. {
  42. a[i] = (23*a[i-1]+21563) % 16714589 ;
  43. }
  44. build() ;
  45. int l , r ;
  46. cin >> l >> r ;
  47. for ( int i = 2 ; i <= m ; ++i )
  48. {
  49. gt = get(l,r) ;
  50. l = ((17*l+751+gt+2*(i-1))%n)+1 ;
  51. r = ((13*r+593+gt+5*(i-1))%n)+1 ;
  52. }
  53. gt = get(l,r) ;
  54. cout << l << ' ' << r << ' ' << gt ;
  55. }