Module: önek toplamları


Problem

1 /8


Satırdaki miktar

Theory Click to read/hide

Biraz dizi olsun. Değişiklik olmadığında, bu dizinin bir alt bölümündeki bazı işlevlerin değerini hızlı bir şekilde (bir satırdan daha hızlı) bulabiliriz. Bunun için ek bellek kullanmamız ve bir ön hesaplama yapmamız gerekiyor.
Örneğin, dizinin bir bölümündeki toplamı hızlı bir şekilde bulmamız gerekiyor.
Önek toplamlarından oluşan bir dizi elde edelim, burada i indeksi, indeksleri i'den küçük veya i'ye eşit olan dizinin tüm öğelerinin toplamı olacaktır.
bir[] – verilen dizi, p[] – önek toplamı dizisi


Dizi sayısı p:
Açıkçası p[0] = a[0]. p[i]'yi p[i – aracılığıyla kolayca yeniden hesaplayabileceğimize dikkat edin. 1], çünkü i öneki üzerindeki miktar, i öneki üzerindeki miktardır – 1 + a[i].
Böylece, önek toplamlarını hesaplama kodu şöyle görünür:

int a[n], p[n];
p[0] = a[0< /span>];
için (int ve = 1; i < n; i++)
         p[i] = p[i -  1] + a[i];

Ayrıca, segmentteki toplamın – önekteki iki toplam arasındaki fark.


Yeşil = kırmızı – mavi
Dolayısıyla, [l,r] aralığındaki toplamı bulmak gerekiyorsa, cevap p[r] – p[l-1].
Ancak, eğer ben – 1 öğe olmayabilir. if’s olmadan yapmak için, 1 indeksleme girebilirsiniz ve a[0] ve p[0] nötr değerlere sahip olacaktır (toplam için 0).
 
Bu tekniğin dahil etme-dışlama formülünün özel bir durumu olduğunu unutmayın, dolayısıyla bu şekilde yalnızca toplamları değil, çarpma ve xor gibi diğer işlevleri de depolamak mümkündür.
 

Problem

Değişmez bir uzunluk dizisi verildiğinde n ve q sorguları, “l ile arasındaki bir dizi alt bölümünün toplamını hesapla r ” Her istek için yanıtı yazdırın.

Girdi
İlk satır bir sayı içeriyor n – dizi boyutu (\(1 <= n <= 10^5\)). İkinci satırda n &ndash sayıları bulunur ; dizi öğeleri. Modulo sayıları \(10^9\) değerini geçmez. Üçüncü satır q sayısını içerir – istek sayısı (\(1 <= q <= 10^5\)). Ardından her biri q satırları gelir bunlardan 2 sayı içerir: l ve r (\(1 <= l <= r <= n\ )).

Çıktı
Tüm sorguların yanıtlarını her biri ayrı bir satırda yazdırın.
 

 

Örnekler
# Girdi Çıktı
1
5
1 2 3 4 5
3
1 2
3 3
2 5
3
3
14