De ce contează?
La intrarea unei parcări stă un paznic cu un numărător. Când o mașină intră, apasă plus unu; când una iese, apasă minus unu. Paznicul nu numără de fiecare dată toate mașinile din parcare — ține minte un singur număr și îl ajustează la fiecare barieră. La sfârșitul zilei știe câte mașini sunt acum înăuntru și, dacă a fost atent, și câte au fost la ora de vârf. Asta e o simulare cu evenimente: o stare mică, schimbată pas cu pas.
Intuiția
Un sistem are o stare — câteva valori care rezumă tot ce s-a întâmplat până acum (aici: câte mașini sunt în parcare). Apoi sosesc evenimente, în ordine, fiecare cu un efect simplu: „a intrat o mașină" sau „a ieșit o mașină". Nu reconstruiești starea de la zero la fiecare eveniment — o iei pe cea de dinainte și aplici doar schimbarea curentă. Trecutul e deja împachetat în stare.
Prima idee: ține o listă cu toate evenimentele de până acum și, după fiecare nou eveniment, numără de la capăt câte plus și câte minus au fost, ca să afli starea curentă.
E risipă. Dacă ai 7 evenimente, recalculezi de la zero de 7 ori; la 100000 de evenimente faci miliarde de pași inutili. Reciti mereu un trecut pe care îl știai deja.
Starea de dinainte rezumă deja tot trecutul. Nu trebuie să o reconstruiești — îi aplici doar efectul evenimentului curent: plus unu sau minus unu. O singură operație per eveniment.
Pornești cu starea inițială, parcurgi evenimentele o singură dată și, la fiecare, modifici starea incremental. După fiecare modificare compari cu maximul de până acum și îl actualizezi dacă e cazul.