2021 網際網路程式設計全國⼤賽
⾼中組網路賽
• 本次⽐賽共9題,含本封⾯共26⾴。
• 全部題⽬的輸⼊都來⾃標準輸⼊。輸⼊中可能包含多組輸⼊,以題⽬敘述為主。
• 全部題⽬的輸出皆輸出到螢幕(標準輸出)。
輸出和裁判的答案必須完全⼀致,英⽂字⺟⼤⼩寫不同或有多餘字元皆視為答題錯誤。
• ⽐賽中上傳之程式碼,使⽤C 語⾔請⽤.c為副檔名;使⽤C++ 語⾔則⽤.cpp 為副檔 名。
• 使⽤ cin輸⼊速度遠慢於 scanf輸⼊,若使⽤需⾃⾏承擔 Time Limit Exceeded的⾵
險。
• 任何題⽬內提到的「⼀⾏」,皆代表以換⾏字元「\n」結尾的字串。
• 部分題⽬有浮點數輸出,會採容許部分誤差的⽅式進⾏評測。⼀般來說「相對或絕對誤差 不超過ϵ皆視為正確」,ϵ值以題⽬敘述為主。
舉例來說,假設 ϵ= 10−6 且a 是正確答案,b是你的答案,如果符合 max(|a|,|b|,1)|a−b| ≤ 10−6, 就會被評測程式視為正確。
Problem Problem Name Time Limit Memory Limit A 殿壬的飲料王國 1 s 1024 MB
B ⼩P打仗 2 s 1024 MB
C 箭頭謎題 1 s 1024 MB
D 紗霧與正宗 6 s 1024 MB E 計算機結構 12 s 1024 MB
F 隨機排序 3 s 1024 MB
G 陣列刪除 1 s 1024 MB
H 殿壬愛字串 2 s 1024 MB
I 幸福感 3 s 1024 MB
2021 網際網路程式設計全國⼤賽 輸⼊輸出範例
C程式範例:
1 #include <stdio.h>
2 int main()
3 {
4 int cases;
5 scanf("%d", &cases);
6 for (int i = 0; i < cases; ++i)
7 {
8 long long a, b;
9 scanf("%lld %lld", &a, &b);
10 printf("%lld\n", a + b);
11 }
12 return 0;
13 }
C++程式範例:
1 #include <iostream>
2 int main()
3 {
4 int cases;
5 std::cin >> cases;
6 for (int i = 0; i < cases; ++i)
7 {
8 long long a, b;
9 std::cin >> a >> b;
10 std::cout << a + b << std::endl;
11 }
12 return 0;
A. 殿壬的飲料王國
Problem ID: drinks
殿壬是個天才兒童,他在⼀個⽉⼤的時候就學會數數、六個⽉⼤的時候就學會乘法跟除 法、⼀歲時學會寫程式、⼀歲⼜六個⽉時養了可愛的拉布拉多、⼀歲⼜⼗個⽉時養了可愛的貓 咪、兩歲時發明了「吃餅乾」的遊戲、三歲⼜三個⽉⼤時成功地對貓咪做了排序。現在要講的 是殿壬三歲⼜四個⽉的故事。
殿壬在三歲⼜四個⽉的時候創⽴了⼀個飲料王國,這個王國⼀共有N 種⾯額的貨幣,⾯額
⼤⼩分別為1,2, . . . , N 元。某⼀天,王國中的N ×M 位⼩朋友想⼀起去飲料王國中最有名的 飲料店「億園」買飲料,「億園」之所以有名是因為他販售了史上最好喝的飲料「QQ捏捏好喝 到殿壬茶」,⽽且只需要花1元就能購買。這N ×M 位⼩朋友中,有M 位恰有⼀張⾯額為 1 元的貨幣、M 位⼩朋友恰有⼀張⾯額為2元的貨幣、· · ·、M 位⼩朋友恰有⼀張⾯額為N 元的 貨幣。這N ×M 位⼩朋友都想去買「QQ捏捏好喝到殿壬茶」,然⽽因為⼈數實在太多,殿壬 只好將⼩朋友們分成紅⽩兩隊,讓紅隊的⼈先去買飲料,等紅隊的所有⼈買完再讓⽩隊的⼈去 買飲料。已知殿壬在幫⼩朋友們分完隊伍後,紅⽩兩隊當中,分別有ai, bi位⼩朋友持有i元貨 幣。
⾝為「億園」飲料店唯⼀店員的你,每次只能接受⼀張訂單,將⼿上唯⼀⼀張訂單處理完 後才能受理下⼀位客⼈點餐。然⽽店⾯開張當天,你發現了⼀個⼤問題,那就是收銀機完全沒 有任何的零錢,也就是沒有辦法找零。無奈之下你只能使⽤客⼈們⽀付的零錢進⾏找零,於是 你希望⼩朋友們能以「完美的」順序排隊,使得每⼀位⼩朋友在點餐時,你都有⾜夠的零錢可 以⽀付找零,也就是說,如果⼀位⼩朋友⽀付了⾯額為x元的貨幣,你必須能夠恰好找給他 x−1元。
好奇⼼旺盛的你,想知道⼩朋友們有幾種「完美的」排隊順序可以讓你順利的為每位⼩朋 友進⾏找零。在兩種排隊順序中,只要存在正整數k 使得你在這兩個排隊順序中服務的第k位
⼩朋友是不同⼈,那它們就是不相同的排隊順序。因為答案可能很⼤,所以只需要計算其除以 998244353之後的餘數就可以了。
Input
輸⼊第⼀⾏包含兩個正整數N, M。
接下來共有N ⾏,其中第i⾏包含兩個整數ai, bi,分別代表紅隊與⽩隊中持有i元貨幣的
• 1≤N ×M ≤106
• 0≤ai, bi ≤M
• ai+bi =M
Output
請輸出⼀個整數,代表⼀共有幾種「完美的」排隊順序除以998244353後的餘數。
Notes
在Sample Input 1中,假設x1, x2 是兩位恰有⼀張⾯額為 1元的⼩朋友,y1, y2 是兩位恰 有⼀張⾯額為2元的⼩朋友,並且{x1, x2, y1}隸屬於紅隊,{y2}隸屬於⽩隊,那麼所有完美的 排隊順序如下:
• x1, x2, y1, y2
• x2, x1, y1, y2
• x1, y1, x2, y2
• x2, y1, x1, y2
Sample Input 1 Sample Output 1
2 2 2 0 1 1
4
Sample Input 2 Sample Output 2
3 2 20
B. ⼩ P 打仗
Problem ID: war
在⼩P國裡,有 N 個⼠兵隨時防守著城牆。由於疫情險峻,所以⼩P決定要替每位⼠兵 施打疫苗。已知第i位⼠兵的防禦⼒為 si,且在施打疫苗後,必須休息ri 天。也就是說,如果 第i位⼠兵在第D天施打疫苗,那在第D, D+ 1,· · · , D+ri−1天,都必須休息。
讓我們定義w(i)為所有在第i天不必休息的⼠兵的防禦⼒和。
為了避免新冠肺炎擴散,⼩P在接下來的N 天中,每天必須恰好為⼀位⼠兵施打疫苗,且 每位⼠兵都必須被施打恰⼀劑疫苗。
因為敵⼈每天都有可能攻打過來,所以⼩P想問你,如果敵⼈在第k天攻打過來,那w(k) 最⼤可以是多少?
請對於k = 1,2,3, . . . , N 都輸出⼀個整數代表答案。注意對於每個k ,你可以獨⽴的決定 對於這個k的施打順序。
Input
輸⼊的第⼀⾏有⼀個正整數N,代表有幾名⼠兵。
第⼆⾏有N 個以空格分開的整數s1, s2, . . . , sN,代表第 i個⼠兵的防禦⼒為si。第三⾏有 N 個以空格分開的整數r1, r2, . . . , rN,代表第i個⼠兵打完疫苗要休息ri 天。
• 1≤N ≤3×105
• 1≤si ≤109
• 1≤ri ≤N
Output
請輸出N 個以空⽩隔開的整數,第i個整數代表最⼤的w(i)。請注意不要輸出多餘的⾏尾 空⽩。
Sample Input 1 Sample Output 1 5
1 1 1 1 1 1 5 5 4 4
4 4 3 2 2
Sample Input 2 Sample Output 2
10
20 9 1 38 2 1 3 4 8 23 1 3 3 2 9 9 8 9 10 10
108 108 108 108 108 106 103 99 94 75
C. 箭頭謎題
Problem ID: arrowpuzzle
OET是⼀位喜愛並且精通放置遊戲的玩家。各式各樣的放置遊戲帶給他快樂。在遊玩「對 數忙碌」的時候,他遇上了⼀個⼩遊戲:箭頭謎題。
在箭頭謎題這個⼩遊戲中,有N 個箭頭由左⾄右排成⼀列。每個箭頭⼀開始可能會是向上 或是向下的,每當你點擊⼀個箭頭,該箭頭以及與其相鄰的所有箭頭的狀態都會被反轉,也就 是說,如果某個箭頭是向下的,那麼直接點擊該箭頭或是點擊任何與其相鄰的箭頭都會使得它 變為向上,反之亦然。遊戲⽬標是在經過⼀系列的點擊操作之後,使得所有箭頭都是向上的,
當你達成這個⽬標就可以得到⼀定的「星星」,是遊戲中的關鍵貨幣。
OET是追求效率的玩家,每有空閒就會遊玩箭頭謎題賺取「星星」。他發現,有時候怎麼 玩都不可能讓所有箭頭都是向上的狀態,只能按「我放棄!」按鈕重新來過。
現在告訴你所有箭頭的初始狀態(向上或是向下),請你幫OET快速辨別他是否有可能完 成這局遊戲,也就是讓所有箭頭都是向上的狀態。
Input
第⼀⾏有⼀個正整數N,表⽰箭頭的數量。
第⼆⾏有⼀個⻑度N 的01字串S表⽰所有箭頭的初始狀態,Si =0表⽰第i個箭頭的狀 態是向上的,Si =1則表⽰第i個箭頭的狀態是向下的。
• 1≤N ≤3×105
• |S|=N, Si ∈ {0,1}
Output
請輸出Yes或No,代表OET是否有可能完成這局遊戲,也就是讓所有箭頭都是向上的狀 態。
Sample Input 1 Sample Output 1 4
0101
Yes
Sample Input 2 Sample Output 2
2 01
No
Sample Input 3 Sample Output 3
7
1011001
Yes
D. 紗霧與正宗
Problem ID: sagiri
紗霧與正宗是⼀對感情⾮常好的兄妹。他們除了會⼀起畫漫畫、做家事、看煙⽕之外,還 會⼀起玩撲克牌。
他們玩撲克牌的⽅式很特別,跟⼀般⼈的撲克牌玩法不太⼀樣。
⾸先,紗霧⼿上會先拿著N 張撲克牌,對於第i張撲克牌,紗霧會給他⼀個數值ai ,代表 紗霧對於那張撲克牌的喜好程度。撲克牌的喜好程度可以是正的(代表紗霧喜歡那張撲克牌),
也可以是負的(代表紗霧討厭那張撲克牌),也可以是零(代表紗霧對那張撲克牌沒感覺)。 接著,正宗會與紗霧進⾏K 輪的交易。第i輪交易的進⾏⽅式如下:
• 正宗會給紗霧⼀張喜好程度為bi的牌。
• 紗霧必須丟出⼀張牌。她可以從以下兩個操作中選擇⼀個:
– 直接把正宗給她的牌丟掉。
– 把她⼿上的某⼀張牌丟掉,並且把正宗給她的牌放進那張被丟掉的牌的位置。
• 正宗會把紗霧丟掉的牌放進家裡的垃圾桶。
進⾏完K 輪交易,他們會把那 N 張撲克牌按照原本的順序,由左⾄右的放在地板上。接 著,正宗與紗霧會個別拿起⼀枝筆,指向撲克牌中的兩個位置(指向的位置可以⼀樣),並且把 介於那兩個位置中間的撲克牌通通拿出來(包含那兩張被筆指的撲克牌),放進他們的作品之 中。
⽽正宗與紗霧很好奇,他們所有可能的作品之中的撲克牌喜好程度總和,最⼤可以到多
⼤?
Input
輸⼊的第⼀⾏包含⼀個正整數T,代表接下來測試資料的筆數。
每⼀筆測試資料,總共會占三⾏。
第⼀⾏包含兩個正整數N, K,代表,⼀開始紗霧⼿上的撲克牌數量,以及進⾏交易的次 數。
第⼆⾏包含N 個正整數a1, a2, . . . , aN,ai 代表紗霧⼿上第i張撲克牌的喜好程度。
第三⾏包含K 個正整數b1, b2, . . . , bK,bi 代表正宗在第i輪交易時,會拿出來的撲克牌的 喜好程度。
• 1≤T ≤106
• 1≤N ≤106
• 1≤K ≤106
• −109 ≤ai, bi ≤109
• 在這T 筆測試資料中,N 的總和不會超過106
• 在這T 筆測試資料中,K 的總和不會超過106
Output
對於每⼀筆測試資料,請輸出⼀⾏,代表所有可能作品中的喜好程度總和的最⼤值。
Notes
在範例的第⼀組測試資料中,紗霧可以在第⼀輪交易時,把第三張牌換掉。這時候她⼿上 的牌的喜好程度分別就是[−1,3,−2,3]。如果他們指向第⼆張牌、第四張牌的話,可以得到喜 好程度總和4,這也是所有喜好程度總和的可能值中,最⼤的那⼀個。
在範例的第⼆組測試資料中,紗霧在第⼀輪交易時,可以直接把正宗給他的牌丟掉。接 著,他們可以指向第⼀張牌、第五張牌,就可以得到喜好程度總和15,這也是所有喜好程度總 和的可能值中,最⼤的那⼀個。
Sample Input 1 Sample Output 1 2
4 1
-1 3 -6 3 -2
5 1
1 2 3 4 5 -1
4 15
This page is intentionally left blank.
E. 計算機結構
Problem ID: architecture
⼩Y是個熱愛學習的資⼯系學⽣,為了確保⾃⼰能夠更有效率地複習,⼩ Y習慣從教授的 投影⽚中擷取精華,製作⾃⼰的筆記。
某⼀天計算機結構(Computer Architecture,臺⼤資⼯系⼤三必修課程)下課後,⼩Y
⼀如往常的打開這天上課的投影⽚打算開始製作筆記。這天的投影⽚上有⼀個重要的圖形,所 以⼩Y 打算將它也畫到⾃⼰的筆記本上。不過⼩Y很快地就遇到了問題:由於投影⽚上教授
⽤了許多種顏⾊來代表圖形中各個不同意義的部分,⼩Y也想在⾃⼰筆記本上使⽤相對應的顏
⾊。可是這個圖形實在太複雜,使得⼩Y不知道要⽤什麼順序跟⽅法來畫它!
投影⽚上的圖形可以被視為⼀個N 個點以及M 條邊的簡單無向圖,每個邊上都有編號為 1到K 的其中⼀種顏⾊。⼩Y也有這 K 種顏⾊的⾊筆。⼀開始,⼩Y的筆記本上已經畫好了 這N 個點,由於⼩Y 是完美主義者,他每次都想要挑⼀個顏⾊,並使⽤這個顏⾊的⾊筆畫⼀
個簡單環。如果著⾊的過程中經過了⼀條已經被塗⾊過的邊,那麼舊的顏⾊會被新的顏⾊蓋過 去。
⼩Y不確定在這種只畫簡單環的⽅式下,能不能成功的畫出投影⽚上的圖⽚。請你寫⼀個 程式幫他判斷吧!
⼀個簡單環被定義為⼀串⻑度⼤於3的序列v1, v2, . . . , vc,滿⾜v1 =vc、v1, v2, . . . , vc−1 兩 兩相異且對於所有的1≤i < c,都存在連接vi 和vi+1 的邊。
Input
輸⼊的第⼀⾏為⼀個正整數T,代表測試資料的數量。
每⼀筆測試資料的第⼀⾏有三個整數N,M,K,分別代表點的數量、邊的數量、以及顏⾊
的數量。接著M ⾏,第i⾏有三個正整數ui,vi,ci,分別代表第i條邊是從第ui 個點連到第vi 個點,且顏⾊為ci。
• 1≤T ≤100
• 1≤N ≤2000
• 0≤M ≤min(N×(N2−1),106)
• 1≤ui ̸=vi ≤N
• 1≤ci ≤K
• 保證輸⼊沒有重複的邊
• 保證T 筆測試資料中N 的總和不超過2000
• 保證T 筆測試資料中M 的總和不超過106
• 保證T 筆測試資料中K的總和不超過2000
Output
輸出T ⾏,每⾏代表⼀筆測試資料的答案:如果⼩Y可以成功畫出這個圖形,輸出Yes, 否則,輸出No。
Notes
對於第三筆範例輸⼊,⼀種合法的畫法是先將環2−3−6−5−2塗顏⾊2,接著再將環 1−2−5−4−1塗為顏⾊1。
Sample Input 1 Sample Output 1 3
3 3 1 1 2 1 2 3 1 3 1 1 4 4 2 1 2 1 2 3 1 3 1 1 1 4 2 6 7 2 1 2 1 2 3 2 1 4 1 2 5 1 3 6 2 4 5 1 5 6 2
Yes No Yes
This page is intentionally left blank.
F. 隨機排序
Problem ID: randomshuffle
⾝經百戰、參加了各式各樣的程式競賽的⼩Y,今天遇到了⼀個與眾不同的題⽬如下:
「有⼀個1 ∼ N 的祕密排列P = [p1, p2, . . . , pN],但你不知道P 確切的排列內容。現在有 M 個線索,每個線索⻑得形如ai < bi 或是ai > bi,代表pai < pbi 或是pai > pbi ,請你輸出 P 到底⻑什麼樣⼦。」
⼩ Y 覺得這題實在太簡單了,瞬間寫完 AC code 並且上傳!然⽽他得到的結果是 WA (Wrong Answer)。⼩Y與他的隊友都覺得很奇怪,⼩Y怎麼可能寫出會WA的code呢?
經過0.1秒的檢查,⼩Y 發現這題並沒有說清楚在P 有多組解的時候要輸出字典序最⼩
或是最⼤的P,或者是輸出任⼀組解。在等待發問被回答的期間,他決定使⽤隨機⼤法來嘗試 直接AC這題。更精確的說,他會在所有符合每⼀個線索的排列當中,均勻隨機的選擇⼀個輸 出。⼩Y 的隊友,⼩P,也是⼀位通靈⼤師,已經猜到主辦單位每⼀筆測試資料的輸⼊了,請 你幫忙計算⼀下,對於某⼀筆輸⼊,⼩Y有多少機率會答對,或者答對的機率太低了。
Input
輸⼊第⼀⾏包含兩個⾮負整數N, M,以空⽩間隔,分別代表P 的⻑度與線索的數量。
接下來M ⾏,第i⾏會是ai>bi或是ai<bi,分別表⽰這個線索是pai > pbi或是pai < pbi。
• 1≤N ≤105
• 0≤M ≤105
• 1≤ai ≤N
• 1≤bi ≤N
Output
如果完全沒有任何符合所有線索的排列,請你輸出−1,代表根本沒有存在符合所有線索 的排列P。如果答對的機率⼩於 1%,請你輸出 0,代表你建議⼩ Y不要⽤隨機來唬爛了。否
你的答案的絕對或相對誤差不超過10−6 都會被當作正確。
Sample Input 1 Sample Output 1
3 1 1 < 2
33.3333333333
Sample Input 2 Sample Output 2
7 6 2 > 1 2 < 3 3 < 4 1 > 5 4 < 6 7 > 1
20.0000000000
Sample Input 3 Sample Output 3
3 3 1 < 2 2 < 3 3 < 1
-1.0
Sample Input 4 Sample Output 4
5 0 0.0
G. 陣列刪除
Problem ID: deleting
這天,你在趕著去參加NPSC (National Party of Super Cat)的路上,就在你快抵達會場 時,⼀隻巨⼤的貓貓神突然降臨在你的⾯前。
「⽤最⼩的花費,刪除掉整個陣列吧!」
這麼說著的貓貓神拿出了⼀個N 個元素的陣列並擺在你眼前,祂向你說明了規則:
• 你每次可以選擇⼀對相鄰的元素對將其刪除,並花費「兩個元素的數值最⼩值」。
• 刪除後,陣列將會合併起來。
• 你必須執⾏ N
2 個操作來將整個陣列刪除,並且所有操作的花費和要最⼩。
不快⼀點完成貓貓神的任務的話,你就⾒不到可愛的貓咪們了,⽽經由你苦苦哀求後,貓 貓神決定讓你找出最⼩的花費和即可,快點完成祂的任務並投向貓咪的懷抱吧!
Input
輸⼊的第⼀⾏有⼀個正整數N,代表陣列的⼤⼩。
第⼆⾏有N 個以空格分開的正整數a1, a2, . . . , aN,代表陣列的內容,ai 代表第i個元素的 數值。
• 1≤N ≤2×105
• N 是偶數
• 1≤ai ≤109
Output
輸出⼀⾏⼀個正整數,代表欲將整個陣列刪除的最⼩花費。
Sample Input 1 Sample Output 1 4
1 3 2 4
3
Sample Input 2 Sample Output 2
8
1 9 7 6 8 7 6 3
16
Sample Input 3 Sample Output 3
6
3 1 4 1 5 9
5
H. 殿壬愛字串
Problem ID: string
殿壬是個天才兒童,他在⼀個⽉⼤的時候就學會數數、六個⽉⼤的時候就學會乘法跟除 法、⼀歲時學會寫程式、⼀歲⼜六個⽉時養了可愛的拉不拉多、⼀歲⼜⼗個⽉時養了可愛的貓 咪、兩歲時發明了「吃餅乾」的遊戲,三歲⼜三個⽉⼤時成功的對貓咪做了排序,三歲⼜四個
⽉時創⽴的飲料王國,販賣了「QQ捏捏好喝到殿壬茶」。現在要講的是殿壬三歲六個⽉⼤時的 故事。
在殿壬三歲⼜六個⽉⼤時,他在地板上撿到⼀組字串A, B。
因為A, B 兩個字串⻑的不⼀樣,所以愛好平等的殿壬就很⽣氣,決定要把B 經由⼀系列 的操作變成A。
他每次會選定 B 字串上的⼀個字元,並且把他刪掉。也就是說,他每次會選定 i 使得 0≤i <|B|,令B′ =B0B1B2· · ·Bi−1Bi+1Bi+2· · ·B|B|−1,然後把B 變成B′。
已知殿壬永遠找得到⼀個⽅法把B 變成A,現在殿壬想知道,在把B 變成A 的所有⽅法 中,若將所有過程中出現的字串蒐集起來,究竟有多少種⻑的不⼀樣的字串呢?
字串X, Y ⻑的不⼀樣,若且唯若|X| ̸=|Y|或存在0≤i <|X|, Xi ̸=Yi。 因為可能有太多種了,所以殿壬只想知道答案除以998244353之後的餘數。
Input
輸⼊的第⼀⾏有⼀個由⼩寫字⺟組成的字串A。輸⼊的第⼆⾏有⼀個由⼩寫字⺟組成的字 串B。
• 1≤ |A| ≤100
• |A| ≤ |B| ≤10000
• 保證殿壬可以將B 經由⼀系列操作變成A
Output
輸出只有⼀⾏僅包含⼀個⾮負整數,代表答案除以998244353之後的餘數。
Notes
在範例測試資料2中,殿壬將aba變成a的過程中可以是下列三種的其中⼀種:
• aba → aa → a
• aba → ab → a
• aba → ba → a
不同的字串有a, aa, ab, ba, aba,共5種。
Sample Input 1 Sample Output 1
a ab
2
Sample Input 2 Sample Output 2
a aba
5
I. 幸福感
Problem ID: happiness
殿壬是個天才兒童,他在⼀個⽉⼤的時候就學會數數、六個⽉⼤的時候就學會乘法跟除 法、⼀歲時學會寫程式、⼀歲⼜六個⽉時養了可愛的拉不拉多、⼀歲⼜⼗個⽉時養了可愛的貓 咪、兩歲時發明了「吃餅乾」的遊戲,三歲⼜三個⽉⼤時成功的對貓咪做了排序,三歲⼜四個
⽉時創⽴的飲料王國,販賣了「QQ捏捏好喝到殿壬茶」,三歲⼜六個⽉時學會與字串平等相 處。現在要講的是殿壬三歲⼜九個⽉⼤時的故事。
在殿壬三歲⼜九個⽉⼤時,住進了CSPN國,在CSPN國,有著⼀種特別的⽣物:PETS。 殿壬認為,與PETS⼀起⽣活,是⼀件⾮常具有幸福感的事情。⽽在⽣活的過程中,殿壬 還發現,如果跟不同的PETS⼀起⽣活,⽣活得到的幸福感會特別⾼!
殿壬想要量化⾃⼰的幸福感,因此他對CSPN國的PETS做出了⼀些分類。在CSPN國裡
⾯,總共有N 個PETS,編號從1到N,對於第i個PETS,殿壬會給他⼀個介於[1, N]之間的 整數ai,代表這個PETS的種類。
接著,殿壬要來定義跟⼀群PETS⽣活可以得到的幸福感。假設殿壬跟第L個PETS到第 R個PETS⼀起⽣活,他得到的幸福感的計算⽅式如下:
• 把aL, aL+1, . . . , aR這些數字蒐集起來
• 如果某種數字出現超過⼀次,把那種數字刪除到只剩⼀個
• 剩下數字的數量,就是殿壬得到的幸福感
例如,如果殿壬跟種類為 [1,2,1]的PETS ⼀起⽣活的話,得到的幸福感是 2,跟種類為 [1,2]的PETS⼀起⽣活的話,得到的幸福感也是2,但跟種類為[1]的PETS⼀起⽣活的話,得 到的幸福感便只有1。
在接下來的Q天內,殿壬每天都想著要跟哪些 PETS⼀起⽣活。在第 i天中,殿壬會特 別想跟第Li 個PETS到第 Ri 個PETS中的其中⼀些PETS⽣活。但是,有選擇障礙的殿壬,
常常不知道要怎麼選擇。於是,他索性隨機選擇滿⾜ Li ≤ l ≤ r ≤ Ri 的 (l, r),並且跟第 l, l+ 1, . . . , r 個PETS⽣活。每個滿⾜條件的(l, r)都有相同的機率被選擇。
⽽殿壬也知道,每天這樣⼦隨機的選擇,很有可能會帶給他隨機的幸福感。於是他很好 奇,每天這樣⼦⽣活下來,每天個別得到的幸福感期望值是多少?
但是殿壬特別懶得計算這種複雜的問題,於是他找上了你,打算請你告訴他每天的幸福感 期望值。⽽他也知道計算期望值時,浮點數誤差的問題很⿇煩,於是對於第i天,你只要告訴 他第i天的期望值乘上 (Ri−Li+1)(Ri−Li)
2 就可以了。可以證明,如此⼀來,你需要告訴殿壬的數 字全部都是整數。
Input
輸⼊的第⼀⾏包含兩個正整數N, Q,分別代表PETS的數量,以及殿壬接下來要度過的天 數。
接下來的⼀⾏,包含N 個正整數a1, a2, . . . , aN,ai 代表第i個PETS的種類。
接下來的Q⾏,第i⾏包含著兩個正整數Li, Ri,代表殿壬在第i天特別想跟第Li個PETS 到第Ri 個PETS中的其中⼀些PETS⽣活。
• 1≤N ≤Q≤3×105
• 1≤ai ≤N
• 1≤Li ≤Ri ≤N
Output
請輸出Q⾏,第i⾏請輸出第i天殿壬希望你告訴他的數字。
Sample Input 1 Sample Output 1
3 4 1 2 1 1 3 2 3
9 4 1 9
Sample Input 2 Sample Output 2 7 5
2 4 7 4 3 3 1 1 7
3 6 1 5 2 6 3 4
66 17 31 28 4