hdu 1506 並查集的思想

2021-06-28 12:40:55 字數 729 閱讀 8887

就是利用rig和lef陣列記錄左邊連續的比自身高的最遠位置,然後統計,每次只要找到乙個中斷點則查詢結束,避免了重複運算,最壞複雜度是n^2但平均複雜度,但對於一般的資料還是有很優秀的複雜度的

#include #include #include #include #define max 100007

using namespace std;

typedef long long ll;

ll h[max];

ll rig[max];

ll lef[max];

int main ( )

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

while ( lef[i] > 1 && h[lef[i]-1] >=h[i] )

lef[i] = lef[lef[i]-1];

for ( int i = n-1 ; i >= 1 ; i-- )

while ( rig[i] < n && h[rig[i]+1] >= h[i] )

rig[i] = rig[rig[i]+1];

ll ans = 0;

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

ans = max ( ans , ( rig[i] - lef[i] + 1 )*h[i] );

printf ( "%i64d\n" , ans );

}}

(連續的矩形)HDU 1506

題意 7 2 1 4 5 1 3 3 直接講資料 給出7個矩形的高,底長都為1,求最大的連通的矩形塊的面積 思路 如果暴力的話肯定超時,有乙個特別巧妙的預處理,如果我們知道每乙個矩形的左右兩邊能延伸到哪就好了,這相當於乙個並查集 如果我找到了 i 並且小於等於第 i 1 的高度,那 i 1 的左邊界...

HDU3938 並查集 並查集

先按邊權值排個序,每次加入一條邊,用並查集,關鍵看懂題。include include include include using namespace std const int maxn 10010 int n,m,q struct edge edges maxn 5 inline int cmp...

hdu 3038 擴充套件並查集 向量思想

題意 給出區間 1,n 下面有m組資料,l r v區間 l,r 之和為v,每輸入一組資料,判斷此組條件是否與前面衝突 最後輸出與前面衝突的資料的個數.看大佬的部落格 向量偏移好秀啊,可以直接找到根節點和子節點的關係。對於集合裡的任意兩個元素x,y而言,它們之間必定存在著某種聯絡,因為並查集中的元素均...