`
Задача Segtree2k17. В середовищі крутих олімпіадних гуру модно знати напам’ять розв'яок такої задачі: Дано масив з N чисел та M запитів виду L R. На кожен такий запит потрібно вивести добуток елементів масиву, що мають індекси від L до R, включно. Оскільки, добуток може бути дуже великим, вам потрібно виводити відповідь по модулю.
Розглянемо таку модифікацію цієї задачі: Умова задачі не змінюється, але змінено обмеження:
Оскільки, в такому випадку вхідний файл буде дуже великим, його пропонується генерувати. Код генератора (С++) повинен бути вбудований в розв’язок. (Аналогічний код мовами Pascal та Python 2* , 3* можна завантажити тут).
const int MAXN = 1000 * 1000;
long long a[MAXN];
long long mod;
unsigned s;
unsigned getNext(){
s ^= (s << 13);
s ^= (s >> 17);
s ^= (s << 5);
return s;
}
int main() {
unsigned n, m, seed ;
cin >> n >> m >> mod >> seed;
s = seed;
for(int i = 0; i < n; i++){
a[i] = getNext();
}
long long ans = 0;
for(int i = 0; i < m; i++){
unsigned left = getNext() % n;
unsigned right = getNext() % n;
if(left > right) swap(left, right);
long long result = query(left, right);
ans = (ans + result) % mod;
}
}
Таким чином , вхідними даними будуть N, M, Mod, Seed, де Seed – початкове значення для генератора. У відповідь потрібно вивести суму відповідей на кожен запит (по модулю)
Технічні умови. Програма Segtree2k17 (яка містить вбудований код генератора!) читає з пристрою стандартного введення натуральні числа N, M, Mod, Seed ( seed<=232) Програма виводить до пристрою стандартного виведення єдине число – суму результатів (по модулю) на всіх запитах.
Приклади
Введення Виведен
10 15 1000000007 1 216091399
Введення Виведення
5000 100000 1283189389247 8932 541836623127
Введення Виведення
1000 100 100007 7632 47019
© LIKT 1998-2024