Krzysztof Diks, Marcin Kubica
Tłumaczenie


Mobile phones


Czwarta generacja stacji przekaźnikowych telefonii komórkowej w regionie Tampere działa w następujący sposób. Cały region jest podzielony na kwadraty. Kwadraty tworzą macierz rozmiaru Stimes S, w której wiersze i kolumny są ponumerowane od 0 do S-1. W każdym kwadracie znajduje się jedna stacja. Liczba aktywnych telefonów wewnątrz każdego kwadratu może się zmieniać, ponieważ telefony mogą przemieszczać się pomiędzy kwadratami oraz być wyłączane lub włączane. Od czasu do czasu, każda stacja przesyła raport o zmianie liczby aktywnych telefonów w jej obszarze wraz z informacją o jej położeniu (wiersz-kolumna w macierzy).

Napisz program, który dostaje te raporty i odpowiada na pytania o aktualną liczbę wszystkich aktywnych telefonów w zadanym prostokątnym obszarze.

WEJŚCIE/WYJŚCIE

Dane wejściowe mają postać liczb całkowitych i są czytane ze standardowego wejścia. Odpowiedzi są wypisywane na standardowe wyjście, również jako liczby całkowite. Format danych wejściowych jest następujący. Każde pojedyncze dane zajmują jeden wiersz i składają się z numeru instrukcji, po którym następują jej parametry (liczby całkowite), zgodnie z następującą tabelką:


llp8cm

Instrukcja & Parametry & Znaczenie
0 & S & Ustalenie rozmiarów macierzy na Stimes S i wypełnienie jej zerami. Instrukcja ta pojawia się tylko raz i zawsze jako pierwsza.

1 & X Y A & Dodanie A do liczby aktywnych telefonów w kwadracie (X,Y) macierzy. Wartość A może być dodatnia lub ujemna.

2 & L B R T & Zapytanie o aktualną, łączną liczbę aktywnych telefonów w kwadratach (X,Y), dla L le X le R, B le Y ....

3 & & Zakończenie programu. Instrukcja ta pojawia się tylko raz, jako ostatnia.

Wszystkie dane wejściowe mieszczą się w podanych zakresach i nie trzeba tego sprawdzać. W szczególności, jeśli A jest ujemne, to możesz założyć, ze liczba telefonów w kwadracie nie spadnie poniżej 0. Numeracja wierszy i kolumn w macierzy zaczyna się od 0, np. dla macierzy 4times 4, mamy 0 le X le 3 i 0 le Y le 3.

Twój program powinien odpowiadać wyłącznie na instrukcje nr 2. W tym przypadku, powinien on wypisać na standardowe wyjście jeden wiersz zawierający jedną liczbę całkowitą - odpowiedź na zapytanie.

WYTYCZNE PROGRAMISTYCZNE

W poniższych przykładach zmienna całkowita last reprezentuje ostatnią liczbę całkowitą wczytaną z wiersza, a answer jest zmienną całkowitą zawierającą odpowiedź.

Jeśli piszesz w C++ i używasz iostreams, powinieneś stosować następującą konwencję wczytywania ze standardowego wejścia i wypisywania na standardowe wyjście:


cin>>last;
cout<<answer<<endl<<flush;

Jeśli piszesz w C lub C++ i stosujesz scanf i printf, powinieneś stosować następującą konwencję wczytywania ze standardowego wejścia i wypisywania na standardowe wyjście:


scanf ("
printf("

Jeśli piszesz w Pascalu, powinieneś stosować następującą konwencję wczytywania ze standardowego wejścia i wypisywania na standardowe wyjście:


Read(last); ... Readln;
Writeln(answer);

PRZYKŁAD

llp8cm stdin & stdout & opis
0 4 & & Ustalenie rozmiaru macierzy na 4 times 4.

1 1 2 3 & & Do kwadratu (1,2) dodaj +3.

2 0 0 2 2 & & Zapytanie dotyczące prostokąta

0 le X le 2, 0 le Y le  2.

& 3 & Odpowiedź na zapytanie.

1 1 1 2 & & Do kwadratu (1, 1) dodaj +2.
1 1 2 -1 & & Do kwadratu (1, 2) dodaj -1.
2 1 1 2 3 & & Zapytanie dotyczące prostokąta

1 le X le 2, 1 le Y le  3.

& 4 & Odpowiedź na zapytanie.
3 & & Koniec.

OGRANICZENIA

p5cmlp6cm

Wymiary macierzy & Stimes S & 1times 1 le Stimes S...

Wartość w kwadracie V w dowolnym momencie & V & 0 le V le 2^(15)-1  ...

Wielkość zmiany & A & -2^(15) le A le 2^(1...

Liczba instrukcji na wejściu & U & 3 le U le 60002

Maksymalna łączna liczba telefonów w macierzy & M & M=230

Spośród 20 zestawów danych, w 16 rozmiar macierzy nie przekracza 512times 512.

UWAGA: Program umożliwiający testowanie rozwiązań przez sieć podaje testowanemu programowi na standardowe wejście zawartość Twojego pliku testowego.