Bu programlama sorununu çözmeye çalışıyordum. Bir dizi sayı ve bazı sorgular verildiğinde,Alt sorgu sorguları
. Her bir sorgu size a, b, c olmak üzere üç sayı verir ve a'dan a'ya eşit veya daha küçük olan indeks a'dan indise b (her ikisi de dahil olmak üzere) tüm öğelerin toplamını yanıtlamanızı ister. örneğin
:
Verilen dizi: {2,4,6,1,5,1,6,4,5,4}
3 sorgular cevaplanması gereken edilir:
> ans = 5, yani {4 + 1}
1 5 3 - -> ans = 3, yani {2 + 1}
4 5 1 -> ans = 1
her 2 4 4 dizideki değer 10^5'den küçüktür, dizi uzunluğu ve sorgu sayısı 10^5
'a kadar olabilir. Yaptığım şey, sorguları sıralamak için Mo'nun algoritmasını (Kare kök ayrıştırma) kullanmış ve Tüm değerlerden daha az olan öğelerin birikimli toplamını 1-10^5 arasında saklamak için bir ikili dizinli ağaç ve sorgulardan sorgular için bir güncelleştirme yapıldı. Bu algoritma ile çözümümün genel karmaşıklığı O (q * sqrt (N) * log (N)) ama yeterince hızlı değil. Daha iyi bir algoritma arıyordum. Sorguların karekök ayrışmasının işe yaramayacağını düşünüyorum. Bu sorunu çözmek için daha iyi bir algoritma var mı?
Bazı veri yapısının farkında olmadığım bu sorunu çözüp çözemeyeceğini merak ediyordum?
"a", "b", "c" dizinleri mi demek istiyorsun? Sıfır tabanlı endeks kullanıyor musunuz? – Bahrom
@Bahrom a ve b '1' tabanlı dizinlerdir, c bir sayıdır. – ash