rqnoj 460單調佇列 1

2021-05-27 18:11:55 字數 692 閱讀 5606

題意:n個人站成一隊,每兩個人之間如果沒有比乙個高的就說明二者能互相看到,問有多少對人能互相看到對方。。

分析:單調佇列,沒的說。。。但是相同高度要特殊處理一下, 這裡我是將連續的相同高度的存到一起並記錄個數。。連續相同高度的這一堆肯定互相能看到,而且都能看到前面和後面的。。。

**:

#includeusing namespace std;

const int n=600010;

int n, a[n], q[n], qn;

int main()

if(qn!=0 && x==q[qn-1])

a[qn-1]++;

else

}while(qn>=2)

ans += a[0]*(a[0]-1)/2;

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

} return 0;}/*

#includeusing namespace std;

const int n=500100;

int n, a, sum;

int q[n], head, tail;

int main()

q[tail++] = a;

} while(tail>head+1)

printf("%d\n", sum);

return 0;

}*/

單調棧,單調佇列

大多數借鑑了 單調佇列是什麼呢?可以直接從問題開始來展開。poj 2823 給定乙個數列,從左至右輸出每個長度為m的數列段內的最小數和最大數。數列長度 n 106,m n 我們知道,解法 在暴力列舉的過程中,有乙個地方是重複比較了,就是在找當前的f i 的時候,i的前面其它m 1個數在算f i 1 ...

單調棧 單調佇列

單調棧 單調佇列是在棧和佇列的基礎上加上單調結構的資料結構。如果乙個元素入棧或入隊,他會檢查之前的元素,如果之前的元素不可能是答案的解,那麼就彈出元素,使得當前元素入棧或入隊。leetcode 239 滑動視窗最大值 此題是單調佇列,每次遇到乙個元素,一直從隊尾彈出,直到隊尾元素大於該元素為止。還需...

單調棧 單調佇列

啊學完了來寫個總結吧 顧名思義,單調,就是指色彩單一某乙個容器裡面的元素都是遞增或遞減的,而單調棧和單調佇列就是這個容器。單調棧 單調棧模板 其他的我就不說了,講下為什麼單調棧是從後往前掃瞄 當我們在判斷乙個數後面第乙個比它大的數時,前提是後面的數已經被處理了,所以我們要從後往前掃瞄。我做了兩種做法...