Ատրակցիոն (ենթախնդիր 2)

Մարդիկ սովորաբար այցելում են ատրակցիոնների զբոսայգիներ խմբերով։ Սակայն ի՞նչ է տեղի ունենում, երբ իրենց հերթը հասնելուց հետո պարզվում է, որ ատրակցիոնում բավարար նստատեղեր չկան իրենց ամբողջ խմբի համար։ Որոշ խմբեր պատրաստ են բաժանվել (մասնատվել), իսկ որոշները՝ ոչ։

Համլետը կառավարում է մի հանրաճանաչ ատրակցիոնի հերթ։ Խմբերը հերթ են կանգնում ատրակցիոն նստելու համար։ Ժամանկի ընթացքում Համլետը ստանում է ատրակցիոնում ազատված նստատեղերի թիվը, այնուհետև խմբերին հերթով առաջարկում է նստել՝ սկսած հերթի ամենառաջին խմբից։ Խմբի որոշումն ընդունվում է հետևյալ կերպ․

  • Եթե ամբողջ խմբի համար բավականաչափ նստատեղեր կան, խումբն ամբողջությամբ նստում է։

  • Հակառակ դեպքում, եթե խումբը պատրաստ է բաժանվել, ապա ուղարկում է այնքան մարդ, որքան անհրաժեշտ է մնացած նստատեղերը լրացնելու համար, իսկ մնացածները շարունակում են սպասել։

  • Հակառակ դեպքում խումբը շարունակում է հերթ կանգնել՝ առանց որևէ անդամի նստեցման։

Հնարավոր է, որ որոշ նստատեղեր այդպես էլ չլրացվեն ընթացիկ նստեցման ընթացքում։ Ովքեր նստեցին ատրակցիոն այլևս հերթին չեն միանալու։

Համլետի համար այս գործընթացը շատ ժամանակատար է, քանի որ նա պետք է բազմիցս շարժվի ողջ հերթով։ Խնդրում ենք գրել ծրագիր, որը կպահի հերթի վիճակը և կորոշի, թե որ խմբերից որքան մարդ է նստում ատրակցիոն հերթական անգամ։

Ծրագիրը պետք է իրացնի հետևյալ երեք գործողությունները․

  1. join (միանալ)՝ խումբը միանում է հերթին վերջից․

    • Տրվում է մեկ ամբողջ թիվ ՝ խմբի չափը։

    • Տրվում է ևս մեկ ամբողջ թիվ , որը կարող է լինել միայն կամ .

      • Եթե , ապա խումբը չի ցանկանում բաժանվել։

      • Եթե , ապա խումբը պատրաստ է բաժանվել։

    • Թող սա լինի -րդ join գործողությունը, այդ դեպքում այս խմբին հատկացվում է նույնականացման համար ID = i, որտեղ -ն սկսվում է -ից։

  2. leave (հեռանալ)՝ խումբը դուրս է գալիս հերթից՝ առանց ատրակցիոն նստելու․

    • Տրվում է մեկ ամբողջ թիվ ՝ հեռացող խմբի ID-ն։

    • Երաշխավորված է, որ այս խումբը տվյալ պահին հերթում է։

    • Եթե խումբը պատրաստ էր բաժանվել, հնարավոր է, որ նրա որոշ անդամներ արդեն նստել են ատրակցիոն և հեռացել։

  3. board (նստեցնել)՝ որոշ խմբեր նստում են ատրակցիոն։

    • Տրվում է մեկ ամբողջ թիվ ՝ ազատ նստարանների քանակը այս նստեցման ժամանակ։

    • Պետք է գտնեք, թե որ խմբերի որքան անդամներ պետք է նստեցվեն։

Մուտքային տվյալներ

Առաջին տողը պարունակում է մեկ ամբողջ թվային ()՝ գործողությունների (join, leave, board) ընդհանուր թիվը։

Հաջորդ տողերը պարունակում են երկու կամ երեք ամբողջ թվեր՝ հետևյալ ֆորմատներից մեկով․

  • (խումբը միանում է հերթին) ()

  • (խումբը հեռանում է հերթից) (երաշխավորվում է որ այդ խումբը հերթի մեջ է)

  • (նստեցման գործողություն) ()

Ելքային տվյալներ

  • join և leave գործողությունների համար ոչինչ պետք չէ տպել։

  • board գործողության համար, թող լինի այն խմբերի թիվը, որոնք ունեն գոնե մեկ անդամ, ով նստեց ատրակցիոն։ Ելքը պետք է պարունակի տող․

    • Առաջին տողը պետք է պարունակի միայն ամբողջ թվային ։

    • Եթե , ապա հաջորդ տողերը պետք է պարունակեն երկու ամբողջ թվեր․

      • ID (խմբի նույնականցաման համարը)

      • boarding count (նստող մարդկանց թիվը)

    • Տողերը պետք է տպվեն խմբի ID-ների աճման կարգով։

Oրինակներ

Մուտք

Ելք

7
1 2 0
1 6 0
1 6 1
3 5
2 2
1 3 0
3 123456789012

2
1 2
3 3
2
3 3
4 3

5
1 1 0
1 1 0
1 1 0
3 2
1 1 0

2
1 1
2 1

4
1 19 1
3 10
3 10
3 10

1
1 10
1
1 9
0

Ենթախնդիրներ

Համար

Սահմանափակում

Միավոր

0

Օրինակները

0

1

12

2

, , լքման (leave) գործողություններ չկան

7

3

, , լքման (leave) գործողություններ չկան

20

4

, լքման (leave) գործողություններ չկան

16

5

10

6

Լրացուցիչ սահմանափակումներ չկան

35

Constraints

Time limit: 1.5 seconds

Memory limit: 512 MB

Output limit: 25 MB

To check your solution you need to sign in
Sign in to continue