robot

Time limit: 0.45s Memory limit: 64MB Input: robot.in Output: robot.out

În viitor Concursul "Urmaşii lui Moisil" va avea, cu siguranţă, şi o secţiune de robotică. Anul acesta însă nu trebuie să proiectaţi un robot, trebuie doar să scrieţi aplicaţia pentru robotul respectiv.

Robotul nostru, să-l numim Moisil, în onoarea patronului acestui concurs, procesează un șir vv format din nn numere întregi, indexate de la 11 la nn.

Notăm cu vstdrv_{st \dots dr} secvența formată din elementele vst,vst+1,,vdrv_{st}, v_{st+1}, \dots, v_{dr}. Definim frecvența unei valori într-o secvență ca fiind numărul de apariții ale acelei valori în secvența respectivă.

O întrebare este definită printr-o pereche de valori st drst\ dr (1stdrn1 \le st \le dr \le n) şi solicită robotului să afişeze un mesaj referitor la frecvenţa valorilor din secvenţa vstdrv_{st \dots dr}.

Mesajele care se afişează depind de modul de funcţionare selectat pentru robot. Înainte de a primi lista de întrebări, se stabileşte un mod de funcţionare, iar robotul va răspunde în funcţie de modul de funcţionare selectat. Există 3 moduri de funcţionare posibile:

  • High. În acest mod robotul poate furniza, la fiecare întrebare, unul dintre următoarele 44 mesaje:
Mesaj Semnificație
!1 toate valorile din secvența vstdrv_{st \dots dr} au frecvența 11
!2 toate valorile din secvența vstdrv_{st \dots dr} au frecvența 22
!1!2 toate valorile din secvența vstdrv_{st \dots dr} au frecvența 2\le 2 și există cel puțin două valori cu frecvențe diferite
x niciunul dintre cazurile de mai sus
  • Medium. În acest mod robotul poate furniza, la fiecare întrebare, unul dintre următoarele 33 mesaje:
Mesaj Semnificație
!1 toate valorile din secvența vstdrv_{st \dots dr} au frecvența 11
?1!2 toate valorile din secvența vstdrv_{st \dots dr} au frecvența 2\le 2, știm că există valori cu frecvența 22, dar nu știm sigur dacă există valori cu frecvența 11
x niciunul dintre cazurile de mai sus
  • Low. În acest mod robotul poate furniza, la fiecare întrebare, unul dintre următoarele 22 mesaje:
Mesaj Semnificație
!1 toate valorile din secvența vstdrv_{st \dots dr} au frecvența 11
x niciunul dintre cazurile de mai sus

Cerință

Scrieţi un program care selectează un mod de funcţionare pentru robot şi afişează răspunsurile date de robot în modul de funcţionare ales pentru o listă de qq întrebări.

Date de intrare

Fişierul de intrare robot.in conţine pe prima linie numerele naturale nn și qq, având semnificaţia din enunţ. A doua linie conține nn numere întregi, care reprezintă elementele v1,v2,,vnv_1, v_2, \dots, v_n. Pe următoarele qq linii se află cele qq întrebări, în forma descrisă în enunţ, câte o întrebare pe o linie. Valorile scrise pe aceeaşi linie sunt separate prin câte un spaţiu.

Date de ieşire

Fişierul de ieşire robot.out conţine q+1q+1 linii. Pe prima linie este scrisă litera H, M sau L, după cum modul de funcţionare selectat pentru robot este High, Medium sau Low. Pe următoarele qq linii sunt scrise, în ordine, mesajele afişate de robot ca răspuns la cele qq întrebări din fişierul de intrare.

Restricții și precizări

  • 1n,q200 0001 \le n, q \le 200\ 000
  • 109vi109-10^9 \le v_i \le 10^9, pentru orice 1in1 \le i \le n
  • Dacă modul de funcționare selectat pentru robot este Low, se acordă 50% din punctajul pe test.
  • Dacă modul de funcționare selectat pentru robot este Medium, se acordă 80% din punctajul pe test.
  • Dacă modul de funcționare selectat pentru robot este High, punctajul pe test se acordă integral.
# Punctaj Restricții
1 22 1n,q1 0001 \le n, q \le 1\ 000 și 1vin1 \le v_i \le n, pentru orice 1in1 \le i \le n
2 18 1n,q1 0001 \le n, q \le 1\ 000 și 109vi109-10^9 \le v_i \le 10^9, pentru orice 1in1 \le i \le n
3 32 1 000<n,q200 0001\ 000 \lt n, q \le 200\ 000 și 1vin1 \le v_i \le n, pentru orice 1in1 \le i \le n
4 28 1 000<n,q200 0001\ 000 \lt n, q \le 200\ 000 și 109vi109-10^9 \le v_i \le 10^9, pentru orice 1in1 \le i \le n

Exemplu

robot.in

10 4
1 2 3 1 2 2 3 3 3 1
3 5
1 5
1 6
5 8

robot.out (modul High)

H
!1
!1!2
x
!2

robot.out (modul Medium)

M
!1
?1!2
x
?1!2

robot.out (modul Low)

L
!1
x
x
x

Explicație

Prima întrebare este 3 53\ 5. În secvenţa v35v_{3 \dots 5} apar 33 valori (11, 22 şi 33) fiecare având frecvenţa 11. În toate cele 3 moduri de funcţionare robotul va afişa mesajul !1.

A doua întrebare este 1 51\ 5. În secvenţa v15v_{1 \dots 5} există 33 valori (11, 22 şi 33), având frecvenţele 22, 22, respectiv 11. În modul High robotul va răspunde !1!2, în modul Medium robotul va răspunde ?1!2, iar în modul Low robotul va răspunde x.

A treia întrebare este 1 61\ 6. În secvenţa v16v_{1 \dots 6} există 33 valori (11, 22 şi 33), având frecvenţele 22, 33, respectiv 11. În toate cele 3 moduri mesajul afişat este x.

A patra întrebare este 5 85\ 8. În secvenţa v58v_{5 \dots 8} există 22 valori (22 şi 33), fiecare având frecvenţa 22. În modul High robotul va răspunde !2, în modul Medium robotul va răspunde ?1!2, iar în modul Low robotul va răspunde x.

Log in or sign up to be able to send submissions!