B2 - XOR fabrika
Vremensko ograničenje | Memorijsko ograničenje |
---|---|
1000ms | 64MB |
U deonici za razvrstavanje delova u kutije poznate kragujevačke fabrike automobila, odlučeno je da se zbog povoljnosti XOR-robota, oni ubace na mesto nekih standardnih robota dodavača. XOR-roboti dodaju deo u kutiju ako se u njoj nalazi paran broj delova, a uzimaju deo iz nje ukoliko se u njoj nalazi neparan broj delova, dok standardni roboti dodavači uvek dodaju deo u kutiju. Kao što to obično biva u fabrikama automobila, ovi roboti se nalaze duž pokretne trake, ima ih \(N\) i numerisani su redom od \(1\) do \(N\). Kutije se na pokretnu traku ubacuju i skidaju sa nje na proizvoljnim mestima i sa proizvoljnim brojem delova koji su već u njoj. Pre zamene nekih od starih robota sa novim robotima, bilo je lako predvideti sa koliko delova će kutija izaći sa trake ako je ubacimo na poziciji \(L\) a skinemo nakon pozicije \(R\), ali sada to nije toliko lako, što upravnicima fabrike predstavlja značajan problem, pa su vas zamolili da napišete program koji rešava njigov problem.
Opis ulaza
U prvom redu se unose brojevi \(N\) i \(Q\), broj robota na pokretnoj traci kao i broj upita. U sledećem redu se unosi niz \(s\) od \(N\) karaktera. U ovom nizu se nalaze isključivo karakteri '+' i '^', koji redom predstavljaju robote dodavače i XOR-robote. U narednih \(Q\) redova se nalaze po tri broja: \(L\), \(R\) i \(X\), koji predstavljaju upit sledećeg tipa: ako stavimo kutiju koja inicijalno ima \(X\) delova u sebi na poziciju pre robota numerisanog sa \(L\), a skinemo je nakon robota numerisanog sa \(R\) (dakle kutija će proći pored \(R - L + 1\) robota), koliko delova će biti u njoj nakon toga?
Opis izlaza
Ispisati \(Q\) brojeva koji predstavljaju odgovore na zadate upite.
Primer 1
Ulaz
Izlaz
Ograničenja
- \(N, Q \le 2 \times 10^5\).
- \(1 \le L \le R \le N\).
- \(X \le 10^9\).
Test primeri su podeljeni u pet disjunktnih grupa:
- U test primerima vrednim \(10\) poena, na pokretnoj traci se nalaze samo roboti dodavači (u nizu se nalaze samo karakteri '+').
- U test primerima vrednim \(10\) poena, \(N, Q \le 2000\).
- U test primerima vrednim \(20\) poena, na pokretnoj traci se nalaze samo XOR-roboti (u nizu se nalaze samo karakteri '^').
- U test primerima vrednim \(30\) poena, Na pokretnoj traci se nalazi najviše \(500\) XOR-robota.
- U test primerima vrednim \(30\) poena nema dodatnih ograničenja.
Autor | Tekst i test primeri | Analiza rеšenja | Testiranje |
---|---|---|---|
Pavle Martinović | Marko Šišović | Pavle Martinović | Igor Pavlović |
Rešenje kada su sve operacije +
U ovom podzadatku važi da je svaka operacija \(+1\), tako da će sve što će se desiti \(+1\) tačno \(R-L+1\) puta, odnosno potrebno je ispisati \(X+R-L+1\)
Rešenje kada \(N,Q\leq 2000\)
U ovom podzadatku naprosto možemo da idemo redom za svaki upit i izsimuliramo sve operacije za složenost \(O(NQ)\)
Rešenje kada su sve operacije ^
U ovom podzadatku rešavamo slično kao prvi podzadatak. Primetimo da svaka operacija broj ksoruje sa \(1\), a dva ksora se poništavaju, tako da je bitna samo parnost \(R-L+1\): ako je parno onda ispišemo \(X\), a u suprotnom \(X\text{ xor }1\).
Rešenje kada ima najviše \(500\) operacija ^
Podelimo naš interval na (najviše \(500\)) intervala sa svim operacijama +. Svaki od njih simuliramo po prvom podzadatku, i onda samo primenimo po jednu operaciju ^. Složenost \(O(500Q)\)
Glavno rešenje
Primetimo da nam se u svakom potezu zapravo menja parnost. Tako da će svaka operacija biti \(+1\) osim nekih ^ operacija koja će biti \(-1\) ako je tada broj na kom vršimo inicijalne poteze neparan. Međutim, ono što treba primetiti da nam je onda samo potreban broj ^ na mestima određene parnosti (ta određena parnost zavisi od \(L\) i \(X\): ako je \(X\) parno onda iste parnost kao \(L\) nam treba, a u suprotnom suprotna parnost). Zato je dovoljno samo zapamtiti dva niza parcijalnih suma: za parne i neparne pozicije broj operacija ^, i onda klasičnim oduzimanjem desnog kraja od levog nađemo koliko ih je u intervalu. Složenost \(O(N+Q)\)