Konie (Horses)

Komentarze

Transkrypt

Konie (Horses)
InternationalOlympiadinInformatics2015
26thJuly-2ndAugust2015
Almaty,Kazakhstan
horses
Day2
Language:pl-PL
Konie(Horses)
Mansur,wzoremswoichstarożytnychprzodków,jestzapalonymhodowcąkoni.Posiadaobecnie
największestadowcałymKazachstanie.Niezawszejednaktakbyło.Ongiś, lattemu,Mansurbył
jedyniedżygitem(kaz.młodymczłowiekiem)mającymtylkojednegokonia.Marzyłwtedy,aby
zarobićdużopieniędzyistaćsiębajem(kaz.bogaczem).
PonumerujmylatadziałalnościMansuraliczbami
,odnajdawniejszychdo
najnowszych.Podczaskażdegorokustadomogłozwiększyćswojąliczebność,wzależnościod
pogody.Dlakażdegoroku ,Mansurpamiętawspółczynnikwzrostu—całkowitądodatniąliczbę
.Jeślinapoczątkuroku stadoliczyło koni,nakoniectegorokubyłojuż
koniwstadzie.
Koniemożnabyłosprzedawaćwyłączniepodkoniecroku.Dlakażdegoroku ,Mansurpamięta
równieżdodatniąliczbęcałkowitą
—cenę,jakąmożnabyłootrzymaćzasprzedażjednegokonia.
Pokażdymrokumożnabyłosprzedaćdowolniewielespośródposiadanychkoni,wszystkiepotej
samejcenie
.
Mansurzastanawiasię,ilenajwięcejpieniędzymógłbyłzarobić,gdybywybrałnajlepszemomentydo
sprzedażykoniwciągutych lat.MaszobecniezaszczytgościćuMansurawczasietoi(kaz.
wakacji),MansurzadałwięctopytanieTobie.
Dodatkowo,wmiaręsnuciaopowieści,Mansurprzypominasobienowefakty.Dokonaonzatem
poprawekswojejhistorii.Każdazpoprawekzmienidokładniejednąwartość
,albodokładnie
jednąwartość
.PokażdejpoprawceMansurznowuzapytaCięonajwiększąsumępieniędzy,jaką
mógłzarobić.PoprawkiMansurakumulująsię—każdazTwoichodpowiedzimusibraćpoduwagę
wszystkiepoprzedniepoprawki.Zwróćteżuwagęnafakt,żekażde
lub
możebyć
zmienianewielokrotnie.
OdpowiedzinapytaniaMansuramogąbyćwielkimisumamipieniędzy.Abyuniknąćdużychliczb,
podajwszystkieodpowiedzimodulo
.
Przykład
Załóżmy,żehistoriatrwa
lataznastępującymiparametrami:
0 1 2
X 2 1 3
Y 3 4 1
DlatychwartościMansurzarobinajwięcej,jeślisprzedaobaswojekoniepodkoniecroku1.Cała
historiawyglądawtedynastępująco:
NapoczątkuMansurposiada1konia.
1/3
Poroku0będziemiał
konie.
Poroku1będziemiał
konie.
Terazmożesprzedaćobakoniezałącznąsumę
Terazzałóżmy,żejest
poprawka:zmiana
.
na .
Popoprawcedanesąnastępujące:
0 1 2
X 2 1 3
Y 3 2 1
Wtymwypadku,jednymzmożliwychnajlepszychrozwiązańjestsprzedażjednegokoniaporoku0,
zaśtrzechporoku2.
Całahistoriawyglądawtedynastępująco:
NapoczątkuMansurposiada1konia.
Poroku0będziemiał
konie.
Sprzedajejednegozkonipocenie
,pozostajemuwięcjedenkoń.
Poroku1będziemiał
konia.
Poroku2będziemiał
konie.
Terazsprzedajewszystkiekoniezasumę
.Zarobiłłącznie
.
Zadanie
Danesąliczby , , orazlistapoprawek.ObliczmaksymalnyzyskzesprzedażykoniMansura
przedwszystkimipoprawkami,atakżepokażdejpoprawce.Podajwynikimodulo
.
Musiszzaimplementowaćfunkcjeinit,updateXandupdateY.
init(N,X,Y)—Programsprawdzającywywołatęfunkcjędokładnieraz.
N:liczbalat.
X:tablicadługości
roku .
.Dlakażdego
,
towspółczynnikwzrostuw
Y:tablicadługości
.Dlakażdego
,
tocenakoniaporoku .
WartościXandYtoliczbypodaneprzezMansuranapoczątku(przedwszystkimi
poprawkami).
PozakończeniudziałaniafunkcjiinittabliceXiYpozostajązaalokowaneimożesz
dowolniemodyfikowaćichzawartość.
FunkcjapowinnazwrócićmaksymalnyzyskMansuradlapodanychpoczątkowych
wartości and ,modulo
.
updateX(pos,val)
2/3
pos:liczbacałkowitazzakresu
val:nowawartość
.
pos .
FunkcjapowinnazwracaćmaksymalnyzyskMansurapouwzględnieniutejpoprawki,
modulo
.
updateY(pos,val)
pos:liczbacałkowitazzakresu
val:nowawartość
.
pos .
FunkcjapowinnazwracaćmaksymalnyzyskMansurapouwzględnieniutejpoprawki,
modulo
.
Możeszzałożyć,żezarównopoczątkowe,jakizaktualizowanepóźniejwartości
oraz
są
liczbamizzakresuod do
włącznie.
Pojednokrotnymwywołaniuinit,programsprawdzającywywołafunkcjeupdateXorazupdateY
pewnąliczbęrazy.ŁącznaliczbawywołańupdateXiupdateYbędziewynosiła .
Podzadania
podzadanie
liczba
punktów
1
17
2
17
3
20
4
5
23
23
dodatkoweograniczenia
,
brak
oraz
odpowiednio
dlainitiupdateX
brak
brak
Przykładowyprogramsprawdzający
Przykładowyprogramsprawdzającyczytadanezplikuhorses.inwnastępującejpostaci:
wiersz1:N
wiersz2:X[0]…X[N-1]
wiersz3:Y[0]…Y[N-1]
wiersz4:M
wiersze5,…,M+4:trzyliczbytypeposval(type=1dlaupdateXoraztype=2dla
updateY).
Przykładowyprogramsprawdzającywypisujewartośćzwróconąprzezfunkcjęinit,aponiej
wartościzwróconeprzezwywołaniafunkcjiupdateXandupdateY.
3/3

Podobne dokumenty