Стена - SnarkNews on IOI

advertisement
InternationalOlympiadinInformatics2014
13-20thJuly2014
Taipei,Taiwan
wall
Day-1tasks
Language:ru-RU
Стена
Джан-Джистроитстенуизкирпичейодинаковогоразмера.Стенасостоитиз столбцов
кирпичей,пронумерованныхслеванаправоот до
.Высотойстолбцаназывается
количествокирпичейвнем.Устолбцовмогутбытьразныевысоты.
Джан-Джистроитстенутак.Сначаланиводномизстолбцовнеткирпичей.ДалееДжан-Джи
выполняет действий,каждоеизкоторыхможетбытьдействиемдобавленияилиудаления
кирпичей.Строительствосчитаетсязаконченным,когдавыполненывсе действий.Перед
каждымдействиемДжан-Дживыбираетинтервализпоследовательностоящихстолбцови
высоту .Послеэтогоонвыполняетодноизследующихдействий:
действиедобавления:Джан-Джидобавляеткирпичивстолбцыизвыбранногоинтервала,
высотакоторыхменьшечем ,так,чтобыонасталаравной .Состолбцами,высота
которыхнеменьше,чем ,онничегонеделает;
действиеудаления:Джан-Джиубираеткирпичиизстолбцовизвыбранногоинтервала,
высотакоторыхбольшечем ,так,чтобыонасталаравной .Состолбцами,высота
которыхнебольше,чем ,онничегонеделает.
Требуетсяопределитьконечнуюформустены.
Пример
Будемсчитать,чтостенасостоитиз10столбцовистроитсязашестьдействий.Все
приведенныеинтервалывключаютграницы.Изображениястеныпослекаждогодействия
представленынарисункениже.
действие
0
1
2
3
4
5
вид
добавление
удаление
удаление
добавление
добавление
удаление
интервал
столбцыс1до8
столбцыс4до9
столбцыс3до6
столбцыс0до5
столбец2
столбцыс6до7
высота
4
1
5
3
5
0
Таккакизначальновсестолбцынесодержаткирпичей,топоследействия0каждыйиз
столбцовсномерамиот1до8будетсодержатьпо4кирпича,столбцысномерами0и9будут
пустыми.Последействия1встолбцахсномерамис4по8остаетсяодинкирпич,9-ый
столбецостаетсяпустым.Столбцысномерамис0по3лежатвнеинтервалаинеменяются.
Действие2неменяетстолбцысномерамис3по6,таккаквнихитакменьшепятикирпичей.
Последействия3количествокирпичейвстолбцахсномерами0,4и5увеличиваетсядо3.
Последействия4вовторомстолбцестановитсяпятькирпичей.За5-оедействиеизстолбцов
1/3
сномерами6и7убираютсявсекирпичи.
Постановказадачи
Позаданномуописанию действийопределитеколичествокирпичейвкаждомстолбцепосле
того,каквседействиябудутвыполнены.ВыдолжныреализоватьфункциюbuildWall.
buildWall(n,k,op,left,right,height,finalHeight)
n:количествостолбцов;
k:количестводействий;
op:массивдлины ;op[i]тип -годействия:1,еслиэтодействиедобавления
кирпичей,и2,еслиэтодействиеудалениякирпичей;
leftиright:массивыдлины ;интервалдля -годействияначинаетсясо
столбцаleft[i]изаканчиваетсястолбцомright[i](включаяобаконца
left[i]иright[i]);left[i]всегданепревосходитright[i];
height:массивдлины ;height[i]высотадля -годействия;
finalHeight:массивдлины ;выдолжнызаписатьконечноеколичество
кирпичейвстолбце вfinalHeight[i].
2/3
Подзадачи
Вовсехподзадачахвсевысотынепревосходят
Подзадача Баллы
1
8
2
24
3
29
4
39
.
Комментарий
нетдополнительных
ограничений
вседействиядобавления
будутдодействийудаления
нетдополнительных
ограничений
нетдополнительных
ограничений
Деталиреализации
Выдолжныпослатьровноодинфайл,названныйwall.c,wall.cppилиwall.pas.Вэтом
файледолжнабытьреализованафункция,описаннаявыше,суказаннымнижепрототипом.На
языкахC/C++выдолжныподключитьзаголовочныйфайлwall.h.
ЯзыкC/C++
voidbuildWall(intn,intk,intop[],intleft[],intright[],
intheight[],intfinalHeight[]);
ЯзыкPascal
procedurebuildWall(n,k:longint;op,left,right,height:
arrayoflongint;varfinalHeight:arrayoflongint);
Примерпроверяющегомодуля
Предоставленныйпримерпроверяющегомодуляимеетследующийформатвводаданных:
строка1:n,k.
строки
(
):op[i],left[i],right[i],height[i].
3/3
Download