• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

sumy prefiksowe

Object Storage Arubacloud
0 głosów
377 wizyt
pytanie zadane 11 stycznia 2023 w C i C++ przez polandonion Mądrala (7,040 p.)
edycja 11 stycznia 2023 przez polandonion

Siemka, dostałem zadanie na poćwiczenie struktur danych. Spróbowałem je zrobić na tablicę, lecz program jest zbyt wolny.

zadanie: link

mój kod:

#include <bits/stdc++.h>

using namespace std;

bool dest[1001][1001];

int main() {
    ios_base::sync_with_stdio(0);
    cin.tie(0); cout.tie(0);

    int n, m, q;
    cin >> n >> m >> q;

    int powi = n * m, zni = 0;

    while (q --) {
        int a, b, c, d;
        cin >> a >> b >> c >> d;
        a ++, b ++;

        for (int i = a; i <= c; i ++) {
            for (int j = b; j <= d; j ++) {
                if (!dest[i][j]) {
                    zni ++;
                    dest[i][j] = 1;
                }
            }
        }
    }

    cout << powi - zni;
}

 

komentarz 11 stycznia 2023 przez Whistleroosh Maniak (56,980 p.)
Można rozwiązać drzewem przedziałowym 2d, ale to prawdopodobnie wciąż byłoby za wolne.

Hint: sumy prefiksowe
komentarz 11 stycznia 2023 przez polandonion Mądrala (7,040 p.)
nie widze powiazania, mozesz jeszcze troszeczke podpowiedziec?
komentarz 11 stycznia 2023 przez Whistleroosh Maniak (56,980 p.)
jakbyś rozwiązał ten problem ale w 1d? Masz tablice rozmiaru n, na której bombardujesz kolejne przedziały. Ile pól nigdy nie zostało zbombardowanych?
komentarz 11 stycznia 2023 przez polandonion Mądrala (7,040 p.)
miałeś na myśli talice rozmiaru n * m?

ale to i tak zajmie dużo czasu, bo co jeśli np ktoś będzie bombardował ciągle te same przedziały?
komentarz 11 stycznia 2023 przez Whistleroosh Maniak (56,980 p.)
Nie, tablica 1d rozmiaru n (n <= 1e6). Na razie spróbuj rozwiązać ten prostszy przypadek i zobacz jak go uogólnić dla 2d.
komentarz 11 stycznia 2023 przez Whistleroosh Maniak (56,980 p.)
Jesli bombardujesz przedział [l, r] dodajesz 1 do arr[l], i odejmujesz -1 od arr[r+1] i na tym liczysz sume prefiksową. Jak teraz policzyć ile pól nie zostało zbomardowanych?
komentarz 11 stycznia 2023 przez polandonion Mądrala (7,040 p.)
juz zaczynam widzieć szybkość i prostotę tego podejścia, tylko po co mieszać z indeksami, tzn arr[r + 1 (a nie od r)].
komentarz 11 stycznia 2023 przez Whistleroosh Maniak (56,980 p.)
Jak dodasz 1 do arr[l] i odejmiesz 1 od arr[r] to pominiesz jedno bombardowanie (bombardowanie pola r).

Zaloguj lub zarejestruj się, aby odpowiedzieć na to pytanie.

Podobne pytania

0 głosów
1 odpowiedź 104 wizyt
pytanie zadane 18 kwietnia 2023 w C i C++ przez HUBSON2912 Obywatel (1,300 p.)
–1 głos
1 odpowiedź 558 wizyt
pytanie zadane 18 grudnia 2018 w C i C++ przez pysiek Początkujący (280 p.)
0 głosów
1 odpowiedź 85 wizyt
pytanie zadane 4 listopada 2023 w Java przez rafalmagician Obywatel (1,320 p.)

92,572 zapytań

141,422 odpowiedzi

319,643 komentarzy

61,959 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...