多校聯賽 Envy

2021-07-31 09:48:24 字數 1382 閱讀 9948

我們讓 n 個人站成一排,編號為 1~n,每個人都有乙個數字代表他這次比賽的成績,對於每個人,如果他後面(編號大於他的人中)存在乙個人的成績大於等於他,那麼他的嫉妒值為他們之間的距離。兩個點 a和 b 之間的距離為 abs(a - b)。例如:{4,3,6,2},那麼第 1 個人對第 3 個人有 2 點嫉妒值;第 2 個人對第 3 個人有 1 點嫉妒值,最大嫉妒值為 2。

第 1 行:1 個整數 n,代表這裡有 n 個人(2 <= n <= 50000)。

接下來的 n 行:每行乙個數 ai(1 <= ai <= 10^9), 表示第 i 個人的比賽成績。

輸出最大嫉妒值。

4 4

3 6

2對於乙個最厲害的人,他是沒有嫉妒值的。也就是說,乙個人越厲害,他所嫉妒的人越少,所以我要當最厲害的那個,即使不是也要向厲害的人靠攏,這樣我才能有最小的嫉妒值。

進入正題,我把所有人的能力按照從大到小排序,然後乙個人乙個人的判斷,如果這個人右邊有比他能力大的,那麼他所能產生的最大值嫉妒值一定是他和比他能力大的那些人中離他最遠的人的距離。所以我按照能力值從大到小的順序列舉的話,每次我只要記錄最靠右的那個人就好了。對於每次列舉出來的這個人,如果他比之前記錄的值更靠右,那麼他沒有嫉妒值,將最靠右的值更新為它。否則將他和最靠右的值只之間的距離和當前得到的最大嫉妒值相比較,已更新當前最大嫉妒值。

#include

#include

#include

using

namespace

std;

struct shu

a[50050];

bool my_cmp(shu a,shu b)

int n;

int main()

sort(a+1,a+n+1,my_cmp);

int max=0;int w=a[1].num;

for(int i=1;i<=n;i++)

if(w-a[i].num>max)

}cout

《做了幾次校賽,感覺比賽真的不像是專題,並不是明確的演算法,還是要盡量封裝過程。先把問題分成若干我理論上能做到的事,然後再想合併和具體的**實現。盡量不要很輕易的放棄乙個超時的演算法,而是要想想怎麼通過資料結構或者處理技巧區域性優化。

說真的,最後幾篇有一點湊數的嫌疑,不過還是在這個月最後半個小時趕上了上個月的部落格數。海風講了一次課,不是我想象中的那麼完美,不過學長說還好。下下週的樹狀陣列一定要講好。這個月開始的時候,一直在補之前落下的課程,後半個月開始刷題,樹狀陣列刷了不少,不過感覺雖然是很有秀操作前途的資料結構,但是還是線段樹功能更強大一點,五月優先學一下這個。五月應該會有一次校賽,三科期中考試,好好準備,好好發揮。準備比賽之前要自己仔細想一件事,演算法大家都會,魔板都會去套,說不定**能力還比你強,想超過別人,你要比別人強在**。演算法原理的理解深度還是巧妙地思維轉換。

多校聯賽總結

首先是一些資料 2014 multi university training contest 1 by fzu a 數學 費馬小定理 b 網路流 最小k路徑覆蓋 c 樹形dp 樹的重心 資料結構 d 貪心 巧妙 e 數學 dp 隱含馬爾科夫模型 f 線段樹 函式式 二分 g 線段樹 狀態壓縮 h 模...

2014多校聯賽總結

轉眼間2014年暑期多校聯賽已經落下帷幕,下面是關於暑期比賽的一些總結.題型統計 2014 multi university training contest 1 by fzu a 數學 費馬小定理 b 網路流 最小k路徑覆蓋 c 樹形dp 樹的重心 資料結構 d 貪心 巧妙 e 數學 dp 隱含馬...

2016多校聯賽2

d.題意 給2組資料a和b陣列,每次有2種操作 l,r,x 把a陣列第l個到第r個元素全置為x,l,r 查詢 l,r 之間哪些位置滿足a i b i i l i r 並把這些位置的數量統計 一直想很久,沒想到什麼有效的方案,直到看到題解才明白過來,原來線段樹套平衡樹還有這種情況 裡面其實不是平衡樹,...