10 29 T1 max 單調棧 貢獻法 二階差分

2021-08-30 11:18:14 字數 979 閱讀 8174

對於每個i用單調棧求出小於i的第乙個比他大的數l[i],以及大於i的第乙個比他大的數r[i]。

i一定是l[i]-r[i]中最大的數,1-a+1分別加(1-a+1)*a[i],a+2 - b+1加 a+1 a[i] a+2-a+b+1 遞減加

用二階差分o(1)完成修改

用兩遍字首和求出答案

#include#include#include#includeusing namespace std;

typedef long long ll;

const int n=1e7+100;

const int inf=0x3f3f3f3f;

int a[n];

int n,p;

void gen()

}int s[n],top;

int c[n];

int l[n],r[n];

int main()

s[++top]=i;

} top=1;

for(i=n;i>=0;i--)

s[++top]=i;

} int x,y;

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

for(int i=1;i<=n;++i)c[i]=(c[i]+p)%p;

for(i=1;i<=n;i++) c[i]=(c[i-1]+c[i])%p;

for(i=1;i<=n;i++) c[i]=(c[i-1]+c[i])%p;

int ans=0;

for(i=1;i<=n;i++) ans=ans^c[i];

cout<

return 0;

}

演算法筆記(二)單調棧(1)最大矩形

單調棧也是演算法題中常用的一種方法,這裡總結一下思路 雖然題目的難度為hard,但是思路還是很好想到的,難點在於優化的部分。我們可以遍歷每根柱子 i 並且以當前柱子的高度 height i 作為此矩形 rectangle i 的高 假設矩形的高為豎直方向的,寬為水平方向 對於此矩形的寬 width ...

11 3清北集訓T1work dp 單調佇列優化

subtask1 暴力dp o nk include include include include include include include includeusing namespace std typedef long long ll const ll inf 0x3f3f3f3f inl...

線段樹 單調棧 UNR 1 爭奪聖杯

用單調棧求出left right 可以發現每個點的貢獻是關於left right的分段函式 然後就是分段函式累加求和 當時打的線段樹 看了題解漲姿勢了 可以差分 做到o n include include includeusing namespace std typedef pairabcd typ...