Advertisement
Guest User

Untitled

a guest
Oct 22nd, 2014
124
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.22 KB | None | 0 0
  1. #include <iostream>
  2.  
  3. #define MAX 1<<24
  4.  
  5. void Swap(unsigned int *x, unsigned int *y)
  6. {
  7.     unsigned int tmp = *x;
  8.     *x = *y;
  9.     *y = tmp;
  10. }
  11.  
  12. unsigned int cur = 0; // беззнаковое 32-битное число
  13.  
  14. unsigned int a = 0, b = 0;
  15.  
  16. const long long mod = 4294967296ll;
  17.  
  18. unsigned int nextRand() {
  19.     cur = cur * a + b; // вычисляется с переполнениями
  20.     return cur >> 8; // число от 0 до 2
  21. }  
  22.  
  23.  
  24. unsigned int arr[MAX] = {0};
  25.  
  26.  
  27. int main(void)
  28. {
  29.     unsigned int m, q;
  30.     std::cin >> m >> q >> a >> b;
  31.  
  32.     unsigned int l, r;
  33.  
  34.     for (int i = 0; i < m; ++i)
  35.     {
  36.    
  37.         unsigned int add = nextRand();
  38.         l = nextRand();
  39.         r = nextRand();
  40.         if (l > r)
  41.             Swap(&l, &r);
  42.  
  43. //   std::cout << "(" << l << "," << r << ")\n";
  44.  
  45.         arr[l] = (arr[l] + add);
  46.        
  47.         if (r + 1 != MAX)
  48.             arr[r + 1] = (arr[r + 1] - add);
  49.     }
  50.  
  51.     unsigned int sum = 0;
  52.  
  53.     for (int i = 1; i < MAX; ++i)
  54.     {
  55.         arr[i] = (arr[i] + arr[i - 1]);
  56.     }
  57.  
  58.     for (int i = 0; i < q; ++i)
  59.     {
  60.         l = nextRand();
  61.         r = nextRand();
  62.         if (l > r)
  63.             Swap(&l, &r);
  64.  
  65.         if (l == 0)
  66.         {
  67.             sum = sum + (arr[r]);
  68.         }
  69.         else
  70.         {
  71.             sum = sum + (arr[r] - arr[l - 1]);
  72.         }  
  73.     }
  74.  
  75.     std::cout << sum << std::endl;
  76.  
  77.  
  78.     return 0;
  79. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement