CSES - Pikapäivitys

Tehtäväsi on toteuttaa tietorakenne, joka pitää yllä kokoelmaa luvuista. Tietorakenteeseen pystyy lisäämään tehokkaasti kk kappaletta lukua xx sekä poistamaan kk pienintä lukua ja laskemaan niiden summan.

Voit olettaa, että jokaisessa operaatiossa kk ja xx ovat enintään 10910^9.

Python

Toteuta tiedostoon quickadd.py luokka QuickAdd, jossa on seuraavat funktiot:

  • add: lisää kk kappaletta lukua xx tietorakenteeseen
  • remove: poista kk 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ää kk kappaletta lukua xx tietorakenteeseen
  • remove: poista kk 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
    }
}