Also habe ich versucht, dieses Programmierproblem zu lösen.Subarray Abfragen
Angesichts einer Reihe von Zahlen und einige Abfragen. Jede Abfrage gibt Ihnen drei Zahlen a, b, c und fordert Sie auf, die Summe aller Elemente von Index a bis Index b (beide eingeschlossen) zu beantworten, die kleiner oder gleich c sind.
zum Beispiel:
Gegeben Array: {2,4,6,1,5,1,6,4,5,4}
3 Anfragen zu beantworten sind:
2 4 4 -> am = 5 dh {4 + 1}
1 5 3 -> am = 3, dh {2 + 1}
4 5 1 -> 1 am =
jeweils Wert im Array ist weniger als 10^5, die Länge des Arrays und die Anzahl der Abfragen könnte reichen bis 10^5
Hier ist, was ich tat ich verwendet Mo's Algorithmus (Square Root Decomposition), um die Abfragen zu sortieren, und erstellt Ein binärer indizierter Baum, um die kumulative Summe der Elemente unter allen Werten von 1-10^5 zu speichern und eine Aktualisierung von Abfragen zu Abfragen durchzuführen. Mit diesem Algorithmus ist die Gesamtkomplexität meiner Lösung O (q * sqrt (N) * log (N)), aber es ist nicht schnell genug. Ich suchte nach einem besseren Algorithmus. Ich denke, Wurzelzerlegung von Abfragen würde nicht funktionieren. Gibt es einen besseren Algorithmus, um dieses Problem zu lösen?
Ich fragte mich, ob eine Datenstruktur dieses Problem lösen könnte, das mir nicht bewusst ist?
Sie meinen "a", "b", "c" sind Indizes? Und verwenden Sie nullbasierte Indexierung? – Bahrom
@Bahrom a und b sind "1" -basierte Indizes, c ist eine Zahl. – ash