51Nod 演算法馬拉松28 C題 棧 單調佇列

2022-03-31 16:19:18 字數 818 閱讀 8557

-zhouzhendong

有乙個棧,有3種操作:

ο 從棧頂加入乙個元素

ο 從棧底加入乙個元素

ο 從棧頂彈出乙個元素

現在,求每次操作後棧內元素的最大值和mod (1e9+7)

n次操作,n<=1e7

這題對於博主這樣的蒟蒻,做出來了,萬分欣喜。

我們在搞乙個棧的同時,維護乙個單調不降的佇列。

然後在彈出棧的時候,如果隊尾元素等於當前彈出的元素,那麼隊尾出隊。

至於兩種進隊,都是最基礎的維護佇列的方法。

每次,最大值就是隊尾元素值。

#include #include #include #include #include using namespace std;

typedef long long ll;

const int n=1e7+5;

const int mod=1e9+7;

int n,a[n],b[n];

int q[n*2],head,tail,st[n*2],first,last;

ll a,b,c,x,aa,bb,mod;

int main()

head=1e7+2,tail=head;

first=head,last=tail;

int ans=0;

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

else if (a[i]==1)

else

ans=(ans+q[tail])%mod;

} printf("%d",ans);

return 0;

}

51nod演算法馬拉松32

比賽鏈結 馬拉松是真的難 應該是我太菜了tnt 同bzoj1534 題解戳這裡 n個有標號的點,其中m個是葉子節點。問有多少數的形態。include include include include include using namespace std typedef long long ll co...

51nod演算法馬拉松15

智力徹底沒有了。看來再也拿不到獎金了qaq。a b君的遊戲 因為資料是9b1l,所以我們可以hash試一下資料。include include include include define rep i,s,t for int i s i t i define dwn i,s,t for int i ...

51nod演算法馬拉松13

a 取餘最長路 不難發現路徑可以拆成三條線段,只要知道兩個轉折點的位置就能計算出答案。設sum i,l,r 表示第i行從l到r元素的和,則答案可以表示為sum 1,1,x sum 2,x,y sum 3,y,n p。字首和一下轉化成 s3 n s3 y 1 s2 y s1 x s2 x 1 p,從小...