Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #define MAX 1<<24
- void Swap(unsigned int *x, unsigned int *y)
- {
- unsigned int tmp = *x;
- *x = *y;
- *y = tmp;
- }
- unsigned int cur = 0; // беззнаковое 32-битное число
- unsigned int a = 0, b = 0;
- const long long mod = 4294967296ll;
- unsigned int nextRand() {
- cur = cur * a + b; // вычисляется с переполнениями
- return cur >> 8; // число от 0 до 2
- }
- unsigned int arr[MAX] = {0};
- int main(void)
- {
- unsigned int m, q;
- std::cin >> m >> q >> a >> b;
- unsigned int l, r;
- for (int i = 0; i < m; ++i)
- {
- unsigned int add = nextRand();
- l = nextRand();
- r = nextRand();
- if (l > r)
- Swap(&l, &r);
- // std::cout << "(" << l << "," << r << ")\n";
- arr[l] = (arr[l] + add);
- if (r + 1 != MAX)
- arr[r + 1] = (arr[r + 1] - add);
- }
- unsigned int sum = 0;
- for (int i = 1; i < MAX; ++i)
- {
- arr[i] = (arr[i] + arr[i - 1]);
- }
- for (int i = 0; i < q; ++i)
- {
- l = nextRand();
- r = nextRand();
- if (l > r)
- Swap(&l, &r);
- if (l == 0)
- {
- sum = sum + (arr[r]);
- }
- else
- {
- sum = sum + (arr[r] - arr[l - 1]);
- }
- }
- std::cout << sum << std::endl;
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement