CSES - Pikapäivitys Tehtäväsi on toteuttaa tietorakenne, joka pitää yllä kokoelmaa luvuista. Tietorakenteeseen pystyy lisäämään tehokkaasti $k$ kappaletta lukua $x$ sekä poistamaan $k$ pienintä lukua ja laskemaan niiden summan.

Voit olettaa, että jokaisessa operaatiossa $k$ ja $x$ ovat enintään $10^9$.

Python

Toteuta tiedostoon quickadd.py luokka QuickAdd, jossa on seuraavat funktiot:
  • add: lisää $k$ kappaletta lukua $x$ tietorakenteeseen
  • remove: poista $k$ pienintä lukua ja palauta näiden lukujen summa
Kummankin funktion tulee toimia tehokkaasti.
class QuickAdd:
    def add(self, k, x):
        # TODO

    def remove(self, k):
        # TODO

if __name__ == "__main__":
    q = QuickAdd()
    q.add(5,3)
    print(q.remove(2)) # 6
    q.add(8,1)
    print(q.remove(4)) # 4
    print(q.remove(7)) # 13
    q.add(10**9,123)
    print(q.remove(10**9)) # 123000000000
Java

Toteuta tiedostoon QuickAdd.java luokka QuickAdd, jossa on seuraavat metodit:
  • add: lisää $k$ kappaletta lukua $x$ tietorakenteeseen
  • remove: poista $k$ pienintä lukua ja palauta näiden lukujen summa
Kummankin metodin tulee toimia tehokkaasti.
public class QuickAdd {
    public void add(int k, int x) {
        // TODO
    }

    public long remove(int k) {
        // TODO
    }

    public static void main(String[] args) {
        QuickAdd q = new QuickAdd();
        q.add(5,3);
        System.out.println(q.remove(2)); // 6
        q.add(8,1);
        System.out.println(q.remove(4)); // 4
        System.out.println(q.remove(7)); // 13
        q.add(1000000000,123);
        System.out.println(q.remove(1000000000)); // 123000000000
    }
}