Sumy prefiksowe
Teoria
Obliczanie sum elementów w przedziałach
Pomysł polega na użyciu sum prefiksowych p0, p1, p2 ... pn. Są to kolejne sumy 0, 1, 2, ... n początkowych elementów tablicy.
Suma prefiksowa jest to suma danej ilości początkowych elementów tablicy.
Żeby ją zastosować, potrzebujemy dodatkowej tablicy. Nazwijmy ją sum_prefiksowa.
1. int sum_pref[n+1];
Zauważmy, że nowa tablica jest o jeden element większa od pierwszej. Kolejnym krokiem jest takie wypełnienie tej tablicy:
1. sum_prefiksowa[0] = 0;
2. for(int i=0; i < n; ++i)
3. sum_pref[i+1] = sum_pref[i] + t[i];
i |
0 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
t[i] |
18 |
11 |
6 |
-2 |
12 |
-19 |
-4 |
-16 |
8 |
-17 |
– |
sum_pref[i] |
0 |
18 |
29 |
35 |
33 |
45 |
26 |
22 |
6 |
14 |
-3 |
Ćwiczenia z rozwiązaniami
Napisz program ...
Zastosuj operator // (operator dzielenia bez reszty), który wykonuje całkowitą operację dzielenia dwóch liczb całkowitych. Na przykład w języku F# w przypadku zastosowania operatora dzielenia / dla liczb całkowitych reszta wyniku jest pomijana (tak samo jest w niektórych językach imperatywnych: C/C++ i Java).
Należy zastosować operator reszty z dzielenia całkowitego modulo, który oznaczamy w języku Python jako %. Podobnie jak w językach imperatywnych C/C++ i Java, operator ten umożliwia uzyskanie tylko reszty z dzielenia, natomiast wartość całkowita jest odrzucana.