Skip to content

Instantly share code, notes, and snippets.

@nagisa
Created December 13, 2012 13:09
Show Gist options
  • Save nagisa/4276298 to your computer and use it in GitHub Desktop.
Save nagisa/4276298 to your computer and use it in GitHub Desktop.
An olympiad problem

#Žurnalas

Parašykite žurnalą, su kuriuo būtų galima atlikti tokius veiksmus:

įterpti <pozicija> <skaičius> <tipas> – įterpia <skaičius> tipo <tipas> įrašų prieš įrašą, esantį pozicijoje <pozicija>. Įrašų, kurių pozicijos nemažesnės už <pozicija>, pozicijos padidėja per <skaičius>.

pašalinti <pozicija> <skaičius> – pašalina <skaičius> įrašų, pradedant nuo įrašo pozicijoje <pozicija>. Įrašų, kurių pozicijos nemažesnės už <pozicija> + <skaičius>, pozicijos sumažėja per <skaičius>.

užklausa <pozicija1> <pozicija2> – suskaičiuoja, kiek yra skirtingų tipų įrašų pozicijose nuo <pozicija1> iki <pozicija2> imtinai.

##Pradiniai duomenys

Pirmoje eilutėje yra sveikasis skaičius N(1 ≤ N ≤ 30000) – operacijų kiekis. Tolesnėse N eilučių yra operacijų aprašai.

Kiekvienos operacijos aprašas prasideda simboliu, nurodančiu operacijos tipą:

+ – įterpti; - – pašalinti; ? – užklausa.

Toliau pateikiami užklausos argumentai – tipas yra mažoji lotyniškos abėcėlės raidė, o kiti argumentai – sveikieji skaičiai. Pozicijos pradedamos skaičiuoti nuo 1 ir visada pateikiamos korektiškai (visose užklausos nurodytose pozicijose visada yra įrašai; niekada neliepiama ištrinti įrašų esančių už žurnalo ribų ir t. t.). Argumentas <skaičius> įterpimo ir pašalinimo operacijose niekada neviršija 10000.

##Rezultatai

Kiekvienai užklausos operacijai išveskite eilutę su vienu sveikuoju skaičiumi – kiek yra skirtingų tipų įrašų tarp <pozicija1> ir <pozicija2> imtinai.

Įvestis

8
+ 1 4 w
+ 3 3 o
? 2 3
- 2 2
? 2 3
+ 2 2 t
? 1 6
- 1 6

Išvestis

2
1
3
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment