Universal Cup Judging System

Universal Cup

حد الوقت: 1 s حد الذاكرة: 1024 MB
الإحصائيات

Keskiarvojen keskiarvo ei ole aina keskiarvo.

VegiCat on juuri oppinut segmenttipuut ja haluaa harjoitella niiden käyttämistä.

Positiiviselle kokonaisluvulle $n$ hän tarkastelee lukujonoa $a_i = i$ ($1 \le i \le n$). Hän päättää rakentaa segmenttipuun vastatakseen tätä lukujonoa koskeviin välin keskiarvo-kyselyihin.

VegiCatin segmenttipuussa jokainen solmu vastaa väliä $[l, r]$ ja tallentaa arvon $v_{l,r}$, jonka VegiCat tarkoittaa esittämään kyseisen välin keskiarvoa. Juuri vastaa koko väliä $[1, n]$.

problem_23592_1a491bf2ea3d5c638f75cb749b35c44a.png

VegiCat kuitenkin olettaa virheellisesti, että vanhempivälin keskiarvo on aina yhtä suuri kuin sen kahdessa lapsisolmussa tallennettujen arvojen keskiarvo. Siksi hän laskee yhteen kahdessa lapsisolmussa tallennetut arvot ja jakaa summan luvulla $2$.

VegiCat muodostaa ensin segmenttipuun kutsumalla $\text{Build}(1, n)$. Kun segmenttipuu on rakennettu, hän vastaa väliä $[L, R]$ koskevaan kyselyyn kutsumalla $\text{Query}(1, n, L, R)$. Nämä kaksi rekursiivista proseduuria on esitetty Algoritmissa 1.

Algoritmi 1 Rakentaminen ja kysely

$$ \begin{array}{rl} 1: & \textbf{procedure } \text{Build}(l, r) \\ 2: & \quad \textbf{if } l = r \textbf{ then} \\ 3: & \quad \quad v_{l,l} \leftarrow a_l \\ 4: & \quad \quad \textbf{return} \\ 5: & \quad \textbf{end if} \\ 6: & \quad m \leftarrow \left\lfloor \dfrac{l + r}{2} \right\rfloor \\ 7: & \quad \text{Build}(l, m) \\ 8: & \quad \text{Build}(m + 1, r) \\ 9: & \quad v_{l,r} \leftarrow \dfrac{v_{l,m} + v_{m+1,r}}{2} \\ 10: & \textbf{end procedure} \\[6pt] 11: & \textbf{procedure } \text{Query}(l, r, L, R) \\ 12: & \quad \textbf{if } L \le l \textbf{ and } r \le R \textbf{ then} \\ 13: & \quad \quad \textbf{return } v_{l,r} \\ 14: & \quad \textbf{end if} \\ 15: & \quad m \leftarrow \left\lfloor \dfrac{l + r}{2} \right\rfloor \\ 16: & \quad \textbf{if } R \le m \textbf{ then} \\ 17: & \quad \quad \textbf{return } \text{Query}(l, m, L, R) \\ 18: & \quad \textbf{else if } L > m \textbf{ then} \\ 19: & \quad \quad \textbf{return } \text{Query}(m + 1, r, L, R) \\ 20: & \quad \textbf{end if} \\ 21: & \quad x \leftarrow \text{Query}(l, m, L, R) \\ 22: & \quad y \leftarrow \text{Query}(m + 1, r, L, R) \\ 23: & \quad \textbf{return } \dfrac{x + y}{2} \\ 24: & \textbf{end procedure} \end{array} $$

Vaikka VegiCatin algoritmi on yleisesti ottaen virheellinen, se palauttaa oikean keskiarvon joillekin väleille. Laske tällaisten välien lukumäärä.

Välille $[L, R]$ sen todellinen keskiarvo on

$$ \frac{\sum_{i=L}^{R} a_i}{R - L + 1}. $$

Tarkemmin sanottuna laske sellaisten ehtoa $1 \le L \le R \le n$ toteuttavien parien $(L, R)$ lukumäärä, joille

$$ \text{Query}(1, n, L, R) = \frac{\sum_{i=L}^{R} a_i}{R - L + 1}. $$

Kaikki keskiarvot lasketaan tarkkoina rationaalilukuina, ilman pyöristystä tai katkaisua.

Syöte

Ensimmäinen rivi sisältää kokonaisluvun $T$ ($1 \le T \le 10^4$), testitapausten lukumäärän. Seuraavaksi annetaan testitapausten kuvaukset.

Jokainen seuraavista $T$ rivistä sisältää yhden kokonaisluvun $n$ ($1 \le n \le 10^6$), lukujonon pituuden.

On taattu, että lukujen $n$ summa yli kaikkien testitapausten on enintään $2 \cdot 10^6$.

Tuloste

Tulosta jokaiselle testitapaukselle kokonaisluku — niiden välien $[L, R]$ lukumäärä, joille VegiCatin kyselyproseduuri palauttaa täsmälleen todellisen keskiarvon.

Esimerkit

Syöte 1

3
1
5
14

Tuloste 1

1
10
35

Huomautus

Toisessa testitapauksessa, $n = 5$, kelvollisia välejä on $10$:

$$ \begin{aligned} &[1, 1],\ [1, 2],\ [2, 2],\ [2, 3],\ [2, 5], \\ &[3, 3],\ [3, 4],\ [4, 4],\ [4, 5],\ [5, 5]. \end{aligned} $$

Esimerkiksi kysely välille $[2, 5]$ palauttaa

$$ \frac{\frac{2+3}{2} + \frac{4+5}{2}}{2} = \frac{7}{2}, $$

mikä on yhtä suuri kuin lukujen $2, 3, 4, 5$ todellinen keskiarvo. Siispä $[2, 5]$ lasketaan mukaan.

Sen sijaan kysely välille $[1, 5]$ palauttaa

$$ \frac{\frac{\frac{1+2}{2}+3}{2} + \frac{4+5}{2}}{2} = \frac{27}{8}, $$

kun taas sen todellinen keskiarvo on $3$. Siispä väliä $[1, 5]$ ei lasketa mukaan.

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.