QOJ.ac

QOJ

حد الوقت: 2 s حد الذاكرة: 512 MB مجموع النقاط: 100 قابلة للهجوم ✓

#23637. Pływy

الإحصائيات

Mała Owieczka mieszka w małej wiosce rybackiej nad fiordem. Przez $n$ kolejnych dni zapisywała wysokość poziomu morza; $i$-tego dnia ($1\leq i\leq n$) wysokość poziomu morza była dodatnią liczbą całkowitą $h_i$.

Dla wybranego okresu od dnia $l$ do dnia $r$ (włącznie z $l$ oraz $r$) niech:

  • $M$ będzie maksymalną wysokością poziomu morza w tym okresie;
  • $A$ będzie numerem pierwszego dnia w przedziale $[l,r]$, w którym wysokość poziomu morza osiąga $M$;
  • $B$ będzie numerem ostatniego dnia w przedziale $[l,r]$, w którym wysokość poziomu morza osiąga $M$.

Wówczas wartość pływu dla tego okresu definiujemy jako $M\cdot(B-A)$. Zauważ, że jeśli maksymalna wysokość poziomu morza wystąpiła tylko raz, to $A=B$, a wartość pływu wynosi wtedy $0$.

Mała Owieczka zada online $q$ pytań. Każde pytanie określa $l$ oraz $r$, a Twoim zadaniem jest wybranie podokresu $[x,y]$ zawartego w $[l,r]$ (czyli $l\leq x\leq y\leq r$), dla którego wartość pływu jest największa.

Wejście

Pierwszy wiersz zawiera dwie liczby całkowite $n$ oraz $q$ ($1\leq n\leq 5\times 10^5$, $1\leq q\leq 3\times10^6$), oznaczające odpowiednio łączną liczbę dni obserwacji oraz liczbę zapytań.

Drugi wiersz zawiera $n$ dodatnich liczb całkowitych $h_1, h_2, \dots, h_n$ ($1\leq h_i\leq 10^9$), oznaczających kolejno wysokość poziomu morza w poszczególnych dniach.

Trzeci wiersz zawiera dwie liczby całkowite $l_1$ oraz $r_1$ ($1\leq l_1\leq r_1\leq n$), oznaczające przedział pierwszego zapytania.

Dla $i$-tego zapytania ($2\leq i\leq q$), zakładając, że $lastans$ jest odpowiedzią na poprzednie zapytanie, przyjmijmy: $$ a_i = \left(l_{i-1} + lastans\cdot37\right) \bmod n + 1,\quad b_i = \left(l_{i-1} + r_{i-1} + lastans\cdot53\right) \bmod n + 1 $$

Wówczas $i$-te zapytanie to w rzeczywistości $l_i=\min(a_i,b_i)$ oraz $r_i=\max(a_i,b_i)$.

Wyjście

Niech $ans_i$ oznacza odpowiedź na $i$-te zapytanie. Wypisz jedną liczbę całkowitą: $(ans_1+1) \oplus (ans_2+2) \oplus \cdots \oplus (ans_q+q)$.

Zauważ, że $\oplus$ oznacza operację bitowej różnicy symetrycznej (XOR).

Przykład

Wejście 1

8 5
5 8 2 8 4 9 3 9
2 7

Wyjście 1

1

Uwagi

Przedział pierwszego zapytania to $[2,7]$, a optymalny podokres to $[2,4]$, w którym maksymalna wysokość poziomu morza wynosi $8$. W okresie $[2,4]$ wysokość $8$ pojawia się po raz pierwszy dnia $2$, a po raz ostatni dnia $4$, zatem wartość pływu dla tego okresu wynosi $8\times(4-2)=16$.

Kolejne wygenerowane zapytania oraz odpowiedzi na nie to odpowiednio: $ [2,3]\to 0,\quad [3,6]\to 0,\quad [2,4]\to 16,\quad [3,7]\to 0. $

Wobec tego szukana suma XOR wynosi $(16+1)\oplus (0+2)\oplus (0+3)\oplus (16+4)\oplus (0+5)=1$.

Discussions

About Discussions

The discussion section is only for posting: General Discussions (problem-solving strategies, alternative approaches), and Off-topic conversations.

This is NOT for reporting issues! If you want to report bugs or errors, please use the Issues section below.

Open Discussions 0
No discussions in this category.

Issues

About Issues

If you find any issues with the problem (statement, scoring, time/memory limits, test cases, etc.), you may submit an issue here. A problem moderator will review your issue.

Guidelines:

  1. This is not a place to publish discussions, editorials, or requests to debug your code. Issues are only visible to you and problem moderators.
  2. Do not submit duplicated issues.
  3. Issues must be filed in English or Chinese only.
Active Issues 0
No issues in this category.
Closed/Resolved Issues 0
No issues in this category.